首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Windows 文件映射實現超大文件分割(10GB+ 實測)

     編輯:關於C++

核心思路

利用 CreateFileMapping + MapViewOfFile 將大文件映射為內存視圖,分塊拷貝至新建文件映射,避免一次性讀入內存。塊大小建議 ≤ 1GB。

關鍵步驟

  1. CreateFile 打開源文件,GetFileSizeEx 獲取 64 位大小。
  2. CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL) 創建只讀映射。
  3. 循環:MapViewOfFile(hFileMap, FILE_MAP_READ, 0, offset, blockSize) 映射當前塊。
  4. 創建目標文件,CreateFileMapping(hNewFile, NULL, PAGE_READWRITE, 0, blockSize, NULL)。
  5. MapViewOfFile(hNewMap, FILE_MAP_WRITE, 0, 0, 0) 獲取寫指針,CopyMemory 複製。
  6. UnmapViewOfFile 雙向解映射,關閉句柄,遞增 Offset。

代碼亮點

  • 使用 LARGE_INTEGER / LONGLONG 支援 >4GB 文件。
  • dwAllocationGranularity 對齊映射位移(雖代碼未顯式對齊,但 MapViewOfFile 要求對齊)。
  • 動態調整最後一塊大小 if (fileSize < blockSize) blockSize = fileSize;。
  • 完整錯誤處理與資源清理鏈。

實測 10GB+ SQL 文件分割成功,適合大數據文件預處理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved