10

エラーなしで ios::in と ios::out の両方で存在しないファイルで fstream を開くことは可能ですか?

4

5 に答える 5

10

fstreamエラーを発生させずに入力および出力 (ランダム アクセス) 用に存在しないファイルを開くには、(またはコンストラクター) 呼び出しでフラグを指定する必要があります。 ファイルはまだ存在しないため、ファイルを 0 バイトで切り詰めることは大したことではありません。fstream::in | fstream::out | fstream::truncopen

指定したときに存在しないファイルを開くときにエラーが発生する場合があります。これは、ストリームから読み取ることができないためです。この場合、早期に失敗すると、後で予期しない失敗を防ぐことができます ios::in

于 2010-05-24T11:36:52.560 に答える
1
#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);どちらの方法でも、ファイルテストが作成されます。

于 2010-05-24T10:55:55.307 に答える
0
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

エラーなしで開くことを保証するためにチェックしていませんが、そうするべきだとかなり確信しています。

于 2011-11-21T22:36:41.843 に答える
0
#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 すると、エラーが発生することはありません。

于 2010-05-24T10:38:55.470 に答える