既知の構造を持つテキストファイルを読み取るプログラムがあります。
たとえば、ファイルの各行に2つの整数と1つの文字列があります。
fscanf
ループ内で使用すると、n
前述のような構造を取り戻すことができます。データファイル内の現在の位置を取得するにはどうすればよいので、それをどこかに保存してから、後で中断したところからテキストファイルを読み続けます。
ftell() 関数を使用します。ファイル内のオフセットを返します。
unsigned long position = ftell(file);
ただし、テキスト ファイルでは、内部バッファーがクリアされていない限り、ftell() が間違った位置を報告する可能性があることを知っておくことが非常に重要です。これをする、
unsigned long position;
fflush(file);
position = ftell(file);
後で fseek を使用できます
fseek(file,position,SEEK_SET);
ftell() は、以前にファイルの先頭からのオフセットを使用するように指示しました。ここでは、SEEK_SET を使用して、渡す位置がファイルの先頭からであることを示します。
編集: リチャードは fflush() が何をするか尋ねました。ファイルを読み書きしているとき、ほとんどの場合、C ライブラリは情報のバッファを保持しています。そのバッファを「フラッシュ」することは、変更を保存するためにそれをディスクに書き出すことです。C ライブラリがテキスト ファイルを処理できるようになっているため、バッファがフラッシュされない限り、このバッファが原因で ftell() が間違った位置を報告する可能性があります。それが fflush() の機能です。
ftellを使用してファイルの位置を保存し、後でファイルに戻るためにfseekを使用します。
ftell
プロセスはとで簡単fseek
です。サンプルコードを見る
int i, int1, int2;
FILE *file;
char *str1;
...
// read 10 lines
for(i=0; i<10; i++){
fscanf(file, "%d %d %s", int1, int2, str1);
}
// save the position;
pos = ftell(file);
// close the file
fclose(file)
...
// later go to that same location after opening the same file
fseek(file, pos, 0);
// continue reading
fscanf(file, "%d %d %s", int1, int2, str1);
私が正しく理解していれば、あなたはftell関数を探しています