在C/C++中创建填充零的1GB文件的最快方法是什么?

Tae*_*hin 6 c++ windows file-io

我需要在Windows操作系统中创建一个填充零的巨大二进制文件.它的大小是给定的.在C/C++中最有效的方法是什么?

Ste*_*ker 6

试着打电话truncate(2):

truncate("/my/file", my_size);
Run Code Online (Sandbox Code Playgroud)

欲获得更多信息,

man 2 truncate
Run Code Online (Sandbox Code Playgroud)

truncate()和ftruncate()函数使得由path命名或由fd引用的常规文件被截断为精确长度字节的大小.

如果先前的文件大于此大小,则额外数据将丢失.如果先前的文件较短,则会扩展,扩展部分读取为空字节('\ 0').

如果您正在寻找Windows本机函数,请查看SetEndOfFile,它可以执行相同的操作.

  • AFAIK,truncate创建一个稀疏文件.如果他最终需要写出那些零,那么它将是快速的. (2认同)

Som*_*ude 5

如果文件确实需要全为零,那么除了写入所有数据之外别无他法.我可能会使用与驱动器块大小相同大小的缓冲区,并将其写入循环,直到您写入所需的大小.

如果文件可以包含未定义数据的"漏洞"(磁盘上已经存在的内容),则可以寻找指定的大小并写入单个字节.

  • 至少在类Unix系统上,这样的"漏洞"读作零. (2认同)