6

ファイルで seekg & tellg を使用するシナリオでは、フードの下で何が起こっているのだろうか?

    // Open file and get file size
    int myFileSize;
    std::fstream myFile;
    myFile.open(myFileName, std::ios::in|std::ios::binary);
    if (myFile.is_open())
    {
        myFile.seekg(0, std::ios::end);
        myFileSize = myFile.tellg();
        myFile.seekg(0, std::ios::beg);
        myFile.close();
    }

Q1:シークは、特別な「EOF 文字」が見つかるまで、実際にファイルの内容全体を調べますか? それとも、ファイルシステムによって提供される他の情報を使用して、ファイルの終わりがどこにあるかを「知る」のですか?

Q2: seek はストリーム シーク操作です。これは、ファイルの内容全体がストリームを通過する必要があるということですか?

これがどのように機能するかについての基本的な理解しかない場合は、ご容赦ください。

4

1 に答える 1

9

Q1:いいえ。OSはファイルのサイズを認識し、seekg()その知識を使用します。ファイルの長さが1、100、10000000000バイトのいずれであっても、ほぼ同じ時間がかかります。

Q2:いいえ。現在の「getpointer」を設定するだけです。これは、WindowsまたはLinuxシステムでは「SetFilePos」または「lseek」に変換されます。他のほぼすべてのOSにも同様の概念があります。

于 2013-02-10T00:14:01.967 に答える