有没有在C ++的功能,创建一个.bin文件,或者是这个代码失去了一些东西?
-
05-09-2019 - |
题
我有一个看起来像这样的代码:
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,烧写”,并运行它,它工作正常。我想知道我是如何得到我的C ++程序自动生成一个空文件“TEST.bin,烧写”如果一个名为“TEST.bin,烧写”文件不存在。
解决方案
您的代码片断是错误的,因为它试图写入你已经打开输入的文件。如果你想写入文件,只需简单的使用,而不是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为默认的内容,如果它不存在。
如果它确实存在,它会独自离开的内容。在这两种情况下,你必须在文件的第一个字节开。
其他提示
我会假设你很可能只是通过打开和关闭文件做到这一点:
if (GetFileAttributes("test.bin") == INVALID_FILE_ATTRIBUTES)
{
fstream file;
file.open("test.bin", ios::out);
file.close();
}
一个选项是打开读/写,并寻求到文件的开头。
然后,您可以读,写,或做任何你想。
不隶属于 StackOverflow