MappedFile.cpp 1017 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "MappedFile.h"
  2. USING_NS_BF;
  3. #ifdef BF_PLATFORM_WINDOWS
  4. MappedFile::MappedFile()
  5. {
  6. mMappedFile = INVALID_HANDLE_VALUE;
  7. mMappedFileMapping = INVALID_HANDLE_VALUE;
  8. mData = NULL;
  9. mFileSize = 0;
  10. }
  11. MappedFile::~MappedFile()
  12. {
  13. if (mData != NULL)
  14. ::UnmapViewOfFile(mData);
  15. if (mMappedFileMapping != INVALID_HANDLE_VALUE)
  16. ::CloseHandle(mMappedFileMapping);
  17. if (mMappedFile != INVALID_HANDLE_VALUE)
  18. ::CloseHandle(mMappedFile);
  19. }
  20. bool MappedFile::Open(const StringImpl& fileName)
  21. {
  22. mFileName = fileName;
  23. mMappedFile = CreateFileA(fileName.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
  24. if (mMappedFile == INVALID_HANDLE_VALUE)
  25. {
  26. return false;
  27. }
  28. DWORD highFileSize = 0;
  29. mFileSize = (int)GetFileSize(mMappedFile, &highFileSize);
  30. mMappedFileMapping = CreateFileMapping(mMappedFile, NULL, PAGE_READONLY, 0, mFileSize, NULL);
  31. mData = MapViewOfFile(mMappedFileMapping, FILE_MAP_READ, 0, 0, mFileSize);
  32. if (mData == NULL)
  33. {
  34. return false;
  35. }
  36. return true;
  37. }
  38. #endif