Самый быстрый способ создать большой файл в C++?

Резервную копию в простом формате можно восстановить с помощью инструмента, подобного psql , который поддерживает специальный протокол для передачи данных. Так что самый простой способ - запустить psql из скрипта.

Если вы хотите реализовать то же поведение без psql , вам нужно разделить файл и извлечь данные, которые должны быть отправлены, используя copy_expert() . Это не сложно, но нужно немного поработать.

5
задан James Z 13 June 2015 в 06:16
поделиться

4 ответа

использование старого файла стиля io

fopen файл для записи.

fseek к желаемому размеру файла - 1.

fwrite единственный байт

fclose файл

16
ответ дан 18 December 2019 в 05:37
поделиться

Самый быстрый способ создать файл определенного размера состоит в том, чтобы просто создать использование файла нулевой длины creat() или open() и затем измените использование размера chsize(). Это просто выделит блоки на диске для файла, содержание должно будет что бы ни случилось быть в тех блоках. Это очень быстро, так как никакая буферная запись не должна происходить.

11
ответ дан 18 December 2019 в 05:37
поделиться

Не уверенный я понимаю вопрос. Вы хотите удостовериться, что каждый символ в файле является печатаемым символом ASCII? Если так, что относительно этого? Заполняет файл "abcdefghabc...."

#include <stdio.h>
int main ()
{
   const int FILE_SiZE = 50000; //size in KB
   const int BUFFER_SIZE = 1024;
   char buffer [BUFFER_SIZE + 1];
   int i;
   for(i = 0; i < BUFFER_SIZE; i++)
      buffer[i] = (char)(i%8 + 'a');
   buffer[BUFFER_SIZE] = '\0';

   FILE *pFile = fopen ("somefile.txt", "w");
   for (i = 0; i < FILE_SIZE; i++)
     fprintf(pFile, buffer);

   fclose(pFile);

   return 0;
}
3
ответ дан 18 December 2019 в 05:37
поделиться

Вы не упомянули операционную систему, но я предполагаю, что create / open / close / write доступны.

Для действительно эффективной записи и, скажем, 4k страницы и блока диска размер и повторяющаяся строка:

  1. откройте файл.
  2. выделите 4k * числа символов в повторяющейся строке, идеально выровненных по границе страницы.
  3. напечатайте повторную строку в память 4k раз, точно заполняя блоки .
  4. Используйте write () для записи блоков на диск столько раз, сколько необходимо. Возможно, вы захотите написать частичную часть для последнего блока, чтобы получить правильный размер.
  5. закройте файл.

Это обходит буферизацию fopen () и друзей, что хорошо и плохо: их буферизация означает, что они хороши и быстры, но они все еще не будут столь же эффективны, как эта, которая не требует дополнительных затрат на работу с буфером.

1
ответ дан 18 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: