C/C++中fseek函數最多能夠從起始位置偏移32位,也就是4G如果有一個10G的文件應當如下來做:
方法一:用Windows API創建大文件。
Windows API提供了創建大文件的函數,CreateFile, ReadFile,和WriteFile.具體的用法可以參考MSN.他的尋址范圍理論上講可達2^64。可以用__int64類型數據尋址。
1 __int64 DataBase::myFileSeek(HANDLE hf, __int64 distance, DWORD MoveMethod)
2 {
3 LARGE_INTEGER li;
4 li.QuadPart = distance;
5
6 li.LowPart = SetFilePointer (hf,
7 li.LowPart,
8 &li.HighPart,
9 MoveMethod);
10
11 if (li.LowPart == INVALID_SET_FILE_POINTER && GetLastError()
12 != NO_ERROR)
13 {
14 li.QuadPart = -1;
15 }
16 return li.QuadPart;
17 }
方法二:把大文件拆成不超過2G的小文件來逐個處理。那么尋址方式為
__int64 Address=FileNum*2G+Address%2G.
文件索引為:Address/2G.文件內偏移為Address%2G.
1