有人可以提供使用 boost iostreams 查找、读取和写入大于 4GB 文件的示例吗
我读到 boost iostreams 据说支持 64 位半便携式方式访问大文件。 他们的常见问题解答提到64 位偏移函数 ,但没有关于如何使用它们的示例。 有人使用这个库来处理大文件吗? 打开两个文件、查找它们的中间部分并将一个文件复制到另一个文件的简单示例将非常有帮助。
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
简短回答
只需包含
并使用
seek
函数,其中seekable
的对象;offset
是stream_offset
;whence
是BOOST_IOS::beg
、BOOST_IOS::cur
或BOOST_IOS::end
。seek
的返回值是std::streampos
类型,并且可以使用 stream_offset ://www.boost.org/doc/libs/1_42_0/libs/iostreams/doc/functions/positioning.html#position_to_offset" rel="noreferrer">position_to_offset
函数。示例
这是一个冗长、乏味且重复的示例,它展示了如何打开两个文件、寻找偏移量 >4GB 以及如何在它们之间复制数据。
警告:此代码将创建非常大的文件(几个 GB)。 在支持稀疏文件的操作系统/文件系统上尝试此示例。 Linux 还可以; 我没有在其他系统(例如Windows)上进行测试。
Short answer
Just include
and use the
seek
function as inwhere
device
is a file, stream, streambuf or any object convertible toseekable
;offset
is a 64-bit offset of typestream_offset
;whence
isBOOST_IOS::beg
,BOOST_IOS::cur
orBOOST_IOS::end
.The return value of
seek
is of typestd::streampos
, and it can be converted to astream_offset
using theposition_to_offset
function.Example
Here is an long, tedious and repetitive example, which shows how to open two files, seek to offstets >4GB, and copying data between them.
WARNING: This code will create very large files (several GB). Try this example on an OS/file system which supports sparse files. Linux is ok; I did not test it on other systems, such as Windows.