我正在使用cstdio
函数创建一个空的二进制文件,并需要将其初始化为一个特定的字节值(可以是零,但不是必须的)。
FILE* file = std::fopen("path/to/file", "wb+");
有没有办法用一个值填充整个文件,或者创建并填充一个缓冲区,然后使用std::fwrite
连续填充文件是唯一的选择?就像这样
std::ffill(byteValue, sizeof(byteValue), fileSize, file);
有特定于平台的解决方案是可以的(我的目标是windows和linux)。
发布于 2018-06-06 05:48:28
使用C++ iostreams,这是非常简单的:
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
--它的速度会快很多。
发布于 2018-06-05 22:47:21
一种选择是将文件映射到内存,并在该内存上使用memset。但填充缓冲区并将其多次写入文件将是一种更容易的解决方案,并且与平台无关。mmap和CreateFileMapping是特定于平台的。
https://stackoverflow.com/questions/50702666
复制相似问题