0


0

このようなコードがあります。

int main(){fstreamファイル。 file.open( "test.bin"、​​ios :: out | ios :: binary); if(!file.is_open()){return -1; int n = 3; file.write(reinterpret_cast(

単独で実行すると-1で終了するので、明らかに "test.bin"を開くことができませんでした。 ただし、空白のメモ帳ファイルを "test.bin"として保存して実行すると、問題なく動作します。 私が疑問に思っているのは、 "test.bin"というファイルがまだ存在していない場合に、私のCプログラムに空のファイル "test.bin"を自動的に生成させる方法です。

3 Answer


2


私はあなたがおそらくファイルを開いたり閉じたりすることによってそれをすることができると思います。

if(GetFileAttributes( "test.bin")== INVALID_FILE_ATTRIBUTES){fstreamファイル。 file.open( "test.bin"、​​ios :: out); file.close(); }


1


1つの選択肢は、読み書き用にオープンしてファイルの先頭までシークすることです。

そうすれば、あなたは読み、書き、あるいはあなたが望むことは何でもすることができます。


1


入力用に開いたファイルに書き込もうとしているため、コードスニペットは間違っています。 ファイルに書き込みたい場合は、 `+ ios

in `の代わりに ` ios :: out +`を使用します。

ファイルを読み取り用に開き、それが存在しない場合は作成したい場合は、次のようにします。

file.open("test.bin", ios::in | ios::binary);
if(!file.is_open()) {
    file.open("test.bin", ios::out | ios::binary);
    int n = 3;
    file.write(reinterpret_cast(&n), sizeof(n));
    file.close();
    file.open("test.bin", ios::in | ios::binary);
    if(!file.is_open()) {
        return -1;
    }
}

ファイルが存在しない場合、デフォルトの内容として整数3でファイルを初期化します。

存在する場合は、内容をそのままにします。 どちらの場合でも、最初のバイトでファイルを開くことになります。