2013-11-28 127 views
0

我必須創建特定大小的文本文件,用戶輸入大小。我只需要知道如何更快地創建文件。目前創建一個10MB文件大約需要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(); 
} 

更新,這是我現在使用的是什麼,但我得到寫入文件以及垃圾的價值,

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

,如果你只是想創建一個大的文件,你不必填寫所有文件的字節,使得它慢,只是告訴文件-system你有多大想

在Linux上,使用truncate

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

使用Windows SetFilePointer

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

它們都可以在不到幾秒的時間內創建幾千兆字節的未初始化文件。

相關問題