我的代码如下:
int main () {
fstream file;
file.open("test.bin", ios::out | ios::binary);
if(!file.is_open())
{
return -1;
}
int n = 3;
file.write(reinterpret_cast<char*>(&n), sizeof(n));
file.close();
return 0;
}
当我单独运行时,它以-1退出,所以很明显它无法打开“test.bin”。但是,如果我将空白的记事本文件保存为“test.bin”,并运行它,它可以正常工作。我想知道的是,如果一个名为“test.bin”的文件尚不存在,我怎么能让我的C ++程序自动生成一个空文件“test.bin”。
答案 0 :(得分:2)
我假设您可以通过打开和关闭文件来执行此操作:
if (GetFileAttributes("test.bin") == INVALID_FILE_ATTRIBUTES)
{
fstream file;
file.open("test.bin", ios::out);
file.close();
}
答案 1 :(得分:1)
一个选项是打开读/写并寻找文件的开头。
然后,你可以阅读,写作或做任何你想做的事。
答案 2 :(得分:1)
您的代码段错误,因为它正在尝试写入您已打开输入的文件。如果您要写入文件,只需使用ios::out
代替ios::in
。
如果您要打开文件进行阅读,但如果它不存在则创建它,您可以使用:
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<char*>(&n), sizeof(n));
file.close();
file.open("test.bin", ios::in | ios::binary);
if(!file.is_open()) {
return -1;
}
}
如果文件尚不存在,这将使用整数3作为默认内容初始化文件。
如果它确实存在,它将保留内容。在任何一种情况下,您都会在第一个字节打开文件。