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 邹敏 阅读(581) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理