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