【问题标题】:How to create a text file of specific size c++ [duplicate]如何创建特定大小的文本文件c ++ [重复]
【发布时间】:2013-11-28 22:16:43
【问题描述】:

我必须创建一个特定大小的文本文件,用户输入大小。我只需要知道如何更快地制作文件。目前创建一个 10mb 的文件大约需要 15 秒。我必须将其减少到最多 5 秒。我怎样才能做到这一点?目前这就是我制作文件的方式

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

【问题讨论】:

    标签: c++


    【解决方案1】:

    您一次填充一个字符。相反,您可以使用new 分配更大的内存块,然后一次写入更大的内存块以加快进程。您可以在分配的内存上使用 memset 以防止内存中有字节字符。但也可以看看关于重复问题的评论,如果文件最初不需要特定内容,还有更快的方法。

    【讨论】:

    • 那是相当低效的。
    • 我假设提问者希望文件最初用空格填充,而不仅仅是创建文件。更新了答案以澄清这一点。
    • 我确实看到了重复的问题,但是当我使用这些方法时,使用大小为 1024 的缓冲区并使用 fputs 将其写入文件,文件的创建速度更快但是我也得到了这个愚蠢的字符串到文件“Íýýýý««««««««þîþ”以及空格。我应该如何删除它?
    • 如上所述:在分配的内存上使用memset将缓冲区设置为''。
    • 我使用了 memset,但这个 'Íýýýý««««««««îþîþ' 字符串仍然存在
    【解决方案2】:

    这里是一个简单的示例,但没有错误检查。

    假设你想要 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;
    }
    

    【讨论】:

      【解决方案3】:

      如果你只是想创建一个大文件,你不必填写文件中的所有字节,这会使它变慢,只需告诉文件系统你想要多大

      在 Linux 上,使用 truncate

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

      Windows 使用SetFilePointer

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

      他们都可以在不到几秒钟的时间内创建几千兆字节的未初始化文件。

      【讨论】:

        猜你喜欢
        • 2011-12-15
        • 1970-01-01
        • 2017-06-04
        • 1970-01-01
        • 2021-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多