エラーなしで ios::in と ios::out の両方で存在しないファイルで fstream を開くことは可能ですか?
5 に答える
fstream
エラーを発生させずに入力および出力 (ランダム アクセス) 用に存在しないファイルを開くには、(またはコンストラクター) 呼び出しでフラグを指定する必要があります。 ファイルはまだ存在しないため、ファイルを 0 バイトで切り詰めることは大したことではありません。fstream::in | fstream::out | fstream::trunc
open
指定したときに存在しないファイルを開くときにエラーが発生する場合があります。これは、ストリームから読み取ることができないためです。この場合、早期に失敗すると、後で予期しない失敗を防ぐことができます。 ios::in
#include <fstream>
ofstream out("test", ios::out);
if(!out)
{
cout << "Error opening file.\n";
return 1;
}
ifstream in("test", ios::in);
if(!in)
{
cout << "Error opening file.\n";
return 1;
}
エラーが発生した場合、メッセージが表示され、1つが返されます。ただし、エラーなしでコンパイルして実行することは可能ofstream out("test", ios::out);
です。ifstream in("test", ios::in);
どちらの方法でも、ファイルテストが作成されます。
std::fstream f("test.txt", std::ios_base::out);
f.close(); //file now exists always
f.open("test.txt", fstream::in | std::ios_base::out);
//f is open for read and write without error
エラーなしで開くことを保証するためにチェックしていませんが、そうするべきだとかなり確信しています。
#include <iostream>
#include <fstream>
using namespace std;
int main () {
fstream f("test.txt", fstream::in | fstream::out);
cout << f.fail() << endl;
f << "hello" << endl;
f.close();
return 0;
}
1
終了しない場合、このコードは印刷され、「test.txt」ファイルは作成されません。そのため、存在しないファイルを開いて fstream すると、エラーが発生することはありません。