質問

C ++で約50〜100 MBのフラットテキストファイルを作成します。 「追加された最初の行」という内容のファイルに400万回挿入する必要があります

役に立ちましたか?

解決

古いスタイルのファイルioの使用

書き込み用のファイルを開く

fseek で目的のファイルサイズに設定します-1。

fwrite 1バイト

ファイルを閉じるファイル

他のヒント

特定のサイズのファイルを作成する最速の方法は、 creat()または open()を使用して長さゼロのファイルを作成し、サイズを変更することです。 chsize()を使用します。これは単にファイルにディスク上のブロックを割り当てるだけで、内容はそれらのブロックにあったものになります。バッファの書き込みを行う必要がないため、非常に高速です。

質問を理解したかどうかわかりません。ファイル内のすべての文字が印刷可能な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;
}

OSについては言及していませんが、creat / open / close / writeが利用可能であると仮定します。

非常に効率的な書き込みと、たとえば4kページとディスクブロックサイズ、繰り返し文字列を想定する場合:

  1. ファイルを開きます。
  2. 4k *繰り返し文字列内の文字数を割り当て、理想的にはページ境界に揃えます。
  3. 繰り返し文字列をメモリに4k回印刷し、ブロックを正確に埋めます。
  4. write()を使用して、必要な回数だけブロックをディスクに書き出します。サイズが正しくなるように、最後のブロックに部分的なピースを書き込むことをお勧めします。
  5. ファイルを閉じます。

これは、fopen()およびフレンドのバッファリングをバイパスします。これは良い点と悪い点です。バッファリングは、それらが素晴らしく、高速であることを意味しますが、それでもまだ作業のオーバーヘッドがない、これほど効率的ではありませんバッファで。

これはC ++またはCで簡単に記述できますが、効率化のためにiostreamまたはstdioではなくPOSIX呼び出しを使用することを前提としているため、コアライブラリの仕様外です。

C ++で大きなファイルを作成する最も速い方法? OK。最速の方法とは、実行時間が最短の方法を意味すると思います。

C ++で約50〜100 MBのフラットテキストファイルを作成し、「追加された最初の行」の内容を400万回ファイルに挿入します。

古いスタイルのファイルioを使用してファイルを事前に割り当てます

fopen the file for write.
fseek to the desired file size - 1.
fwrite a single byte
fclose the file

create a string containing the "Added first line\n" a thousand times.
find it's length.

古いスタイルのファイルioを使用してファイルを事前に割り当てます

fopen the file for write.
fseek to the the string length * 4000
fwrite a single byte
fclose the file

open the file for read/write
loop 4000 times, 
    writing the string to the file.
close the file.

それが私の最善の推測です。 それを行う方法はたくさんあると確信しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top