1

ファイルを開いてバイナリデータをファイルに追加するレガシーコードに取り組んでいます。

    std::ifstream mInFile;

    #ifdef WINDOWS
        miWindowsFileHandle = _sopen(filename.c_str(), O_RDONLY , SH_DENYWR, S_IREAD);
    #endif

    mInFile.open(filename.c_str(), std::ios_base::binary);

何らかの理由で、コードはファイルを 2 回開きます。これは、Windows でファイルをロックするために _sopen が使用されているためですか?

もしそうなら、どうして std::ifstream::open がファイルをロックしないのでしょうか?

Windows ファイル ハンドルが既に閉じられているかどうかを確認する方法はありますか?

4

1 に答える 1

2

最初の 1 つがそれを開き、それをロックするため、2 回開きます。次に、 fstream はそれを再び開きます (前のステートメントの意図とは多少矛盾しています)。

ファイルをロックする方法については、この質問を確認してください

于 2009-08-11T06:00:09.957 に答える