0

ファイルストリームでファイルを開いていません。「参照」ボタンがあり、それをクリックすると、他のすべての参照ボタンと同様に、ファイルを選択するオプションが表示されます。次に、その種類のファイルを開くようにすでに定義されているアプリケーションでファイルが開かれます。たとえば、pdfファイルはadobeで開かれ、.txtはメモ帳(またはメモ帳++または開くように設定されているその他のテキストエディタ)で開かれます。 .txtファイル)。そのファイルの特定の時間にロードされたコンテンツの量を取得したいのですが、そのファイルの部分的にロードされたコンテンツのサイズを取得する方法はありますか?

4

2 に答える 2

1

次の仮定を行います。

  • あなたの「事前定義されたアプリケーション」は、実際にはあなたの管理下にないライブラリですが、あなたのためにファイルを読んでいます
  • ファイルの読み取りポインタがどこまで進んだか知りたい
  • 「事前定義されたアプリケーション」が使用しているファイル (FILE *またはifstream、POSIX ファイル記述子、または Windows ファイル)を表す基になるオブジェクトにアクセスできます。HANDLE

でファイルをfopen読み取り用に開いた場合は、 on を使用ftellFILE *ます。

FILE *infile;
//...
long position = ftell(infile);

がある場合はifstream、 メソッドを使用しtellgます。

std::ifstream infile;
//...
long position = infile.tellg();

ファイルが で読み取り用に開かれた場合、ファイル記述子でopen使用できます。lseek

int infile;
//...
long position = lseek(infile, 0, SEEK_CUR);

OpenFileを使用して Windows で読み取り用にファイルを開く場合はSetFilePointerHANDLE.

HANDLE infile;
//...
long position = SetFilePointer(infile, 0, 0, FILE_CURRENT);
于 2012-06-26T04:39:28.397 に答える
0

C++ ストリームを使用している場合は、tellg関数を使用してファイル内の位置を取得できます。

これは、ストリーム文字のサイズに相対的な位置を返すことに注意してください。たとえば、istream(を使用するchar)の 10 文字を読み取ると 10 と報告されますが、 (を使用する)tellgから 10 文字を読み取ると、報告される量は のサイズに応じて 20 または 40 になります。wistreamwchar_twchar_t

于 2012-06-26T05:15:14.590 に答える