Windows下如何在大文件中寻址

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
Posted on 2008-11-19 22:23 邹敏 阅读(313) 评论(0)   编辑  收藏 引用

你可能感兴趣的:(Windows下如何在大文件中寻址)