Как создать новый двоичный файл и заполнить его постоянным значением? - PullRequest
0 голосов
/ 05 июня 2018

Я использую cstdio функции для создания пустого двоичного файла, и мне нужно, чтобы он был инициализирован определенным байтовым значением (может быть нулевым, но не обязательно).

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

Есть лиспособ заполнить весь файл значением, или создание и заполнение буфера, а затем использование std::fwrite для непрерывного заполнения файла мой единственный вариант?Что-то вроде

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

Было бы хорошо иметь решения для конкретной платформы (я ориентируюсь на Windows и Linux).

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Используя 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 - это может быть значительно быстрее.

0 голосов
/ 05 июня 2018

Один из вариантов: преобразовать файл в память и использовать memset в этой памяти.Но заполнение буфера и запись его в файл несколько раз было бы более простым решением и не зависело от платформы.Mmap и CreateFileMapping зависят от платформы.

...