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

WriteFileGather - What is the way to write huge files(bigger than 4 GB)?

本文关键字:GB 方法 是什么 大于 大型 文件 WriteFilegather-      更新时间:2023-10-16

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

代码样本:

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

使用FTELL和FSEEK对我不起作用。显然," writefilegather"需要重叠。要分配的offset值。

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

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

因此,如果您想使用WriteFileGather(我个人,我不会),这不是障碍。您不能在一个go中写入超过4GB (但无论如何您都不想这样做!),尽管总文件长度或文件中的偏移量可能要大得多。<<<<<<<<<<<<

这是一个较晚的答案,但是Windows和Linux的FTELL和FSEEK的64位版本。对于Windows,是_FTELLI64和_FSEEKI64。对于Linux,它是ftello64和fseeko64。