web-dev-qa-db-ja.com

std :: fstreamはファイルを作成しません

ファイルへのioにstd :: fstreamを使用しようとしていますが、ファイルがまだ存在しない場合は作成します。

  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);

「そのようなファイルやディレクトリはありません」という結果が表示されます。

この場合、どうすればファイルを作成できますか?

31

fstream :: open() の呼び出しでstd::fstream::inを指定しています。これは known で、既存のファイルを強制的に要求します。

mode引数からstd::fstream::inを削除するか、他のフラグに加えてstd::fstream::truncを指定します。

42

少し面倒ですが動作します。ファイルが存在する場合はファイルを上書きしませんが、最初のオープンが失敗した場合は新しいファイルを作成します。

std::fstream my_stream
my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out);

if(!my_stream)
{
    my_stream.open("my_file_name",std::fstream::binary | std::fstream::trunc | std::fstream::out);    
    my_stream.close();
    // re-open with original flags
    my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out);
}
else
{
    // read something
} 

// read/write here
11
incognick