【问题标题】:How to create a new binary file and fill it with a constant value?如何创建一个新的二进制文件并用常量值填充它?
【发布时间】:2018-06-05 14:31:09
【问题描述】:

我正在使用cstdio 函数创建一个空的二进制文件,并需要将其初始化为特定的字节值(可以为零,但不一定)。

FILE* file = std::fopen("path/to/file", "wb+");

有没有办法用一个值填充整个文件,或者创建并填充一个缓冲区,然后使用std::fwrite 连续填充文件是我唯一的选择?类似的东西

std::ffill(byteValue, sizeof(byteValue), fileSize, file);

拥有特定于平台的解决方案是可以的(我的目标是 windows 和 linux)。

【问题讨论】:

  • 0 对于 linux 是特殊的,但一般情况下你必须写入所有数据

标签: c++ file visual-c++ io


【解决方案1】:

使用 C++ iostream,非常简单:

std::ofstream out("path/to/file", std::ios::binary);

char byteValue = '\0'; // or whatever

std::fill_n(std::ostreambuf_iterator<char>(out), fileSize, byteValue);

但是,如果 fileSize 真的很大,您可能更喜欢使用 std::ofstream::write 来代替 - 它可以更快。

【讨论】:

    【解决方案2】:

    一种选择是将文件映射到内存并在该内存上使用 memset。但是填充缓冲区并将其多次写入文件将是一个更简单的解决方案并且独立于平台。 mmap 和 CreateFileMapping 是特定于平台的。

    【讨论】:

      猜你喜欢
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多