2013-11-28 58 views
0

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

void create_file() 
{ 
    int size; 
    cout<<"Enter size of File in MB's : "; 
    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(); 
} 

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

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(); 
} 

ответ

4

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

+0

Это довольно неэффективно. – Domi

+0

Я предположил, что искатель хочет, чтобы файл сначала заполнялся пробелами, а не просто создавал файл. Обновлен ответ, чтобы уточнить это. – fpw

+0

Я видел дубликат вопроса, однако, когда я использую эти методы, используя буфер размером 1024 и используя fputs для записи его в файл, файлы создаются быстрее, но я также получаю эту тупую строку, написанную в файле «Íýýýý« « «« «« «« «» »Вместе с пробелами. Как мне удалить это? – chaudrhy

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); 

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

Смежные вопросы