已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。
3天前关闭。
Improve this question
我需要在Windows操作系统中创建一个巨大的二进制文件,文件的大小是给定的,在C/C++中最有效的方法是什么?
已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。
3天前关闭。
Improve this question
我需要在Windows操作系统中创建一个巨大的二进制文件,文件的大小是给定的,在C/C++中最有效的方法是什么?
5条答案
按热度按时间56lgkhnf1#
请尝试拨打
truncate(2)
:如需了解更多信息,
truncate()和ftruncate()函数使由path命名或由fd引用的常规文件被截断到精确长度字节的大小。
如果文件先前大于此大小,则会丢失额外的数据。如果文件先前较短,则会对其进行扩展,扩展部分读取为空字节("\0")。
如果您正在寻找Windows本机函数,请查看SetEndOfFile,它的功能大致相同。
06odsfpq2#
如果文件真的需要全部为零,那么除了写入所有数据外,没有其他方法。我可能会使用与驱动器块大小相同大小的缓冲区,并循环写入,直到写入到所需的大小。
如果文件中包含未定义数据的“空洞”(磁盘上实际上已经存在的数据),你可以查找到指定的大小并写入一个字节,这样的空洞实际上会被读为零。
cs7cruho3#
如果有人想知道我是如何解决这里的问题的:
ie3xauqp4#
“最快”依赖于平台,在unix上,使用open和write系统调用;请确保使用较大的缓冲区(~ 1 MB)调用write。
t2a7ltrp5#
也许这就是你要找的
SPARSE
文件。这些类型的文件通常是由文件共享程序创建的。http://www.flexhex.com/docs/articles/sparse-files.phtml