我有某种只有文件句柄 (FILE*) 的阅读器。 另一个进程不断写入我无法控制的同一文件。
现在,随着其他进程将图像附加到该文件,文件大小可能很快就会超过 4 GB 的限制。
读取器进程使用图像文件的句柄、偏移量和长度读取该文件,这些可以从一些数据库中找到。
我的问题是读者如何能够从 4GB 大小后出现的文件中读取 block 。
我在 Win32 机器上工作。
编辑: 我也在 FreeBSD 机器上工作。
最佳答案
只需在 Windows 上使用标准 C API,fread
、fwrite
就可以很好地处理大文件。您将需要 _fseeki64
来查找 64 位位置。
您也可以使用普通的 WinAPI(ReadFile
等),它也可以毫无问题地处理 >4 GiB 文件。
[编辑]:您真正需要的唯一东西是 64 位搜索,ReadFile
通过 OVERLAPPED
结构提供(如一些评论者所提到的)。您可以当然也可以通过使用 SetFilePointer
获得这相当于 _fseeki64
。读/写从来不是问题,无论文件大小,只求。
关于C:读取大于 4 GB 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6565145/