WinFileStream.h
上传用户:kx_jwh
上传日期:2021-09-03
资源大小:76k
文件大小:2k
源码类别:

STL

开发平台:

Visual C++

  1. /* vim: set tabstop=4 : */
  2. #ifndef __WinFileStream_h__
  3. #define __WinFileStream_h__
  4. #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  5. # pragma once
  6. # pragma warning(push)
  7. # pragma warning(disable: 4267)
  8. #endif
  9. #include "../refcount.h"
  10. #include "IOException.h"
  11. #include "IStream.h"
  12. #if !defined(_WINDOWS_) && !defined(_INC_WINDOWS)
  13. #   define WIN32_LEAN_AND_MEAN
  14. # include <windows.h>
  15. #endif
  16. namespace febird {
  17. class WinFileStream : public RefCounter, public ISeekableStream
  18. {
  19. public:
  20. typedef boost::mpl::true_ is_seekable;
  21. ~WinFileStream();
  22. explicit WinFileStream(
  23. HANDLE hFile = INVALID_HANDLE_VALUE,
  24. bool bAutoClose = false,
  25. const std::string& strFile = ""
  26. );
  27. explicit WinFileStream(
  28. LPCSTR szFile,
  29. DWORD dwDesiredAccess,
  30. DWORD dwShareMode = FILE_SHARE_READ,
  31. LPSECURITY_ATTRIBUTES lpSecurityAttributes = 0 // optional
  32. );
  33. explicit WinFileStream(
  34. LPCSTR szFile,
  35. DWORD dwDesiredAccess,
  36. DWORD dwShareMode,
  37. LPSECURITY_ATTRIBUTES lpSecurityAttributes, // optional
  38. DWORD dwCreationDisposition,
  39. DWORD dwFlagsAndAttributes = 0,
  40. HANDLE hTemplateFile = NULL
  41. );
  42. bool open(
  43. LPCSTR szFile,
  44. DWORD dwDesiredAccess,
  45. DWORD dwShareMode = FILE_SHARE_READ,
  46. LPSECURITY_ATTRIBUTES lpSecurityAttributes = 0 // optional
  47. );
  48. bool open(
  49. LPCSTR szFile,
  50. DWORD dwDesiredAccess,
  51. DWORD dwShareMode,
  52. LPSECURITY_ATTRIBUTES lpSecurityAttributes, // optional
  53. DWORD dwCreationDisposition,
  54. DWORD dwFlagsAndAttributes = 0,
  55. HANDLE hTemplateFile = NULL
  56. );
  57. void attach(HANDLE hFile,
  58. bool bAutoClose = false,
  59. const std::string& strFile = "");
  60. HANDLE detach();
  61. size_t read(void* vbuf, size_t length);
  62. size_t write(const void* vbuf, size_t length);
  63. void seek(int64_t offset, int origin);
  64. uint64_t tell() const;
  65. void flush();
  66. void close();
  67. uint64_t size();
  68. void setEof(uint64_t newSize);
  69. protected:
  70. HANDLE m_hFile;
  71. bool m_bAutoClose;
  72. std::string m_strFile;
  73. uint64_t do_seek(int64_t offset, int origin);
  74. DWORD DefaultCreateDisposition(DWORD dwDesiredAccess) const;
  75. std::string ErrorText(DWORD errCode) const;
  76. };
  77. }
  78. #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  79. # pragma warning(pop)
  80. #endif
  81. #endif // __WinFileStream_h__