2012-01-12 10 views
27

を作成しません。の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); 

私はこの結果を得る: "そのようなファイルまたはディレクトリ" を

この場合、ファイルを作成するにはどうすればよいですか?

答えて

38

あなたはfstream::open()へのお電話でのstd::fstream::inを指定しています。これは、既存のファイルを要求するように強制するknownです。

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

+20

「trunc」は、毎回空のファイルを作成することに注意してください。 –

10

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

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 
+0

その2番目のclose()を削除できます。単に "binary | in | out | trunc"というフラグをつけて開くとうまくいくでしょう。非常に遅く、この上 – TorbenC

+0

、しかし、可能性がない my_stream.open( "my_file_name"、のstd :: fstreamの::バイナリ|のstd :: fstreamの:: TRUNC |のstd :: fstreamの::アウト)。 は単に my_stream.open( "my_file_name"、のstd ::イオス::アウト)すること。 ? これは、ファイルを一時的に作成することを意味しています... – user2962533

関連する問題