C IO ライブラリを使用してファイルを操作しようとする場合、std::fstream は便利なファイル アクセスと入出力機能を提供します。 。ただし、ファイル作成時に問題が発生すると、進行が妨げられる可能性があります。
よくある落とし穴の 1 つは、ファイルを開くときに間違ったフラグを使用することです。次のスニペットを考えてみましょう:
<code class="cpp">std::fstream my_stream; my_stream.open("my_file_name", std::fstream::binary | std::fstream::in | std::fstream::out); if (!my_stream) std::cout << "error" << strerror(errorno);</code>
このコードでは、書き込み用に「my_file_name」という名前のファイルを作成しようとしています。ただし、mode 引数に std::fstream::in を含めると、意図しない結果が生じます。
<code class="cpp">// In effect, the above code is equivalent to: my_stream.open("my_file_name", std::fstream::binary | std::fstream::in);</code>
std::fstream::in フラグは、既存のファイルの必要性を明示的に指定しており、これは、存在しない可能性のあるファイルを作成しようとしています。
この問題を修正するには、いくつかの解決策が利用可能です。
mode 引数から std::fstream::in フラグを削除するだけです。これにより、ストリームがファイルが存在しない場合にファイルを作成できるようになります。
<code class="cpp">my_stream.open("my_file_name", std::fstream::binary | std::fstream::out);</code>
Ifファイルがすでに存在する場合は、ファイルに追加するのではなく、切り詰めた方がよい場合があります。これを実現するには、モード引数に std::fstream::trunc を追加します。
<code class="cpp">my_stream.open("my_file_name", std::fstream::binary | std::fstream::out | std::fstream::trunc);</code>
フラグの適切な使用法とその意味を理解することは、std::fstream でファイルを効果的に管理するために重要です。
以上が`std::fstream` がファイルの作成に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。