Как создать текстовый файл определенного размера c ++ [duplicate]

0

Я должен создать текстовый файл определенного размера, пользователь вводит размер. Все, что мне нужно знать, - это сделать файл быстрее. В настоящее время создание файла размером 10 МБ занимает около 15 секунд. Я должен уменьшить это до 5 секунд. Как я могу это сделать? В настоящее время я делаю свой файл

void create_file()
{
    int size;
    cout<<"Enter size of File in MB : ";
    cin>>file_size;
    size = 1024*1024*file_size;   // 1MB = 1024 * 1024 bytes
    ofstream pFILE("my_file.txt", ios::out);

    for(int i=0; i<size; i++)   //outputting spces to create file
        pFILE<<' ';

    pFILE.close();
}

Обновление, это то, что я использую сейчас, но я получаю значение мусора, записанное в файл,

void f_c()
{
int i, size;
cin>>size;
FILE * new_file = fopen("FILE TEST.txt", "w");
char buffer[1024];
memset(buffer,' ', 1024);
for(i = 0; i<1024 * size; i++)
    fputs(buffer, new_file);
getchar();
 }
Теги:

3 ответа

4
Лучший ответ

Вы заполняете его по одному символу за раз. Вместо этого вы могли бы выделить большую часть памяти, используя new а затем записать более крупные куски одновременно, чтобы ускорить процесс. Вы можете использовать memset в выделенной памяти, чтобы предотвратить наличие байтов в памяти. Но также посмотрите на комментарий о дублированном вопросе, есть даже более быстрые методы, если у файла не должно быть определенного контента изначально.

  • 0
    Это довольно неэффективно.
  • 0
    Я предположил, что спрашивающий хочет, чтобы файл изначально заполнялся пробелами, а не просто создавал файл. Обновил ответ, чтобы уточнить это.
Показать ещё 6 комментариев
0

Вот простой пример, но без проверки ошибок.

Допустим, вы хотите размер 1000:

#include <fstream>   

int main () {
  int size = 1000;
  const char* filename= "file.txt";
  std::ofstream fout(filename);

  fout.fill (' ');
  fout.width (size);
  fout << " ";

  return 0;
}
0

Вам не нужно заполнять все байты в файле, если вы просто хотите создать большой файл, который сделает его медленным, просто скажите файловой системе, насколько большой вы хотите

В Linux используйте truncate

truncate("data.txt",1024*1024*1024);

Windows использует SetFilePointer

SetFilePointer (hFile, 1024*1024*1024, NULL, FILE_BEGIN); 

оба из них могут создать неинициализированный файл с некоторыми гигабайтами менее чем за секунды.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню