4

既知の構造を持つテキストファイルを読み取るプログラムがあります。

たとえば、ファイルの各行に2つの整数と1つの文字列があります。

fscanfループ内で使用すると、n前述のような構造を取り戻すことができます。データファイル内の現在の位置を取得するにはどうすればよいので、それをどこかに保存してから、後で中断したところからテキストファイルを読み続けます。

4

6 に答える 6

10

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() の機能です。

于 2012-05-20T00:05:08.487 に答える
2

ftellを使用してファイルの位置を保存し、後でファイルに戻るためにfseekを使用します。

于 2012-05-19T23:50:41.123 に答える
1

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);
于 2012-05-19T23:56:30.680 に答える
0

私が正しく理解していれば、あなたはftell関数を探しています

于 2012-05-19T23:50:43.510 に答える