WriteFileGather - 编写大文件(大于4 GB)的方法是什么?

时间:2015-05-08 07:13:50

标签: c++ windows winapi file-io io

我正在使用windwos xp,我想将数据(每次大约4 MB)附加到文件中。 使用'WriteFileGather',我一直增加重叠结构的偏移量值。 由于系统调用是32位,因此偏移值(DWORD)不能超过4GB值。

代码示例:

LARGE_INTEGER size;
if (!GetFileSizeEx(_hFile, &size))
{
    return;
}
overlapped.Offset = size.QuadPart;

使用ftell和fseek对我不起作用。 显然,'WriteFileGather'需要分配overlapped.offset值。

超过4G限制的方法是什么?

2 个答案:

答案 0 :(得分:4)

WriteFileGather采用OVERLAPPED结构,从中获取写入开始的文件中的偏移量。此偏移量分为高和低双字(OffsetOffsetHigh),因此它实际上是64位偏移量。

所以,如果你想使用WriteFileGather(个人而言,我不会),这不是障碍。你不能一次写超过4GB (但你不会想要这样做!),尽管总文件长度或文件的偏移量可能远大于

答案 1 :(得分:0)

这是一个迟到的答案,但Windows和Linux存在64位版本的ftell和fseek。对于Windows,它是_ftelli64_fseeki64。对于Linux,它是ftello64fseeko64