BigFile.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #ifndef __BIG_FILE_H
  2. #define __BIG_FILE_H
  3. // common
  4. #include "File.h"
  5. /**
  6. * @brief
  7. * File.h仅支持2G(32位有符号数 =》 2G)文件的读写操作
  8. *
  9. * 读取大文件(超过2G)时会产生错误
  10. *
  11. * BigFile使用标准库接口重新封装了对大文件的读写操作
  12. *
  13. * @notes
  14. * 使用64位有符号数进行操作,64位有符号数的最大值为:
  15. * 9,223,372,036,854,775,808
  16. * 最大支持不超过
  17. * 8,589,934,592 GiB文件的操作
  18. *
  19. * @note
  20. * !! BigFile用于处理二进制文件,不支持读写文本文件
  21. */
  22. namespace tzc {
  23. class DECLDLL BigFile {
  24. public:
  25. BigFile();
  26. BigFile(const std::string & path);
  27. ~BigFile();
  28. TZ_Int32 Open(TZ_Uint32 openMode = tzc::File::OpenModeRead |
  29. tzc::File::OpenModeBinary | tzc::File::OpenModeSync);
  30. TZ_Int32 Close(void);
  31. TZ_Int64 Read(TZ_BYTE * pData, TZ_Int64 readLen);
  32. TZ_Int64 Write(const TZ_BYTE * pData, TZ_Int64 writeLen);
  33. TZ_Int64 Seek(TZ_Int64 offset, tzc::File::FileSeekPos pos);
  34. TZ_Int64 Truncate(TZ_Int64 newSize);
  35. TZ_Int64 Tell(void);
  36. TZ_Int64 GetFileSize(void);
  37. const std::string & GetFilePath() const;
  38. // none-zero for in the end, zero for not
  39. TZ_BOOL IsEndOfFile(void);
  40. private:
  41. std::string getStrFileMode(void);
  42. private:
  43. FILE * m_file;
  44. TZ_Uint32 m_openMode;
  45. std::string m_filePath;
  46. };
  47. }; // ! namespace tzc
  48. #endif // !__BIG_FILE_H