有没有在C ++的功能,创建一个.bin文件,或者是这个代码失去了一些东西?

StackOverflow https://stackoverflow.com/questions/908555

  •  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();
}

一个选项是打开读/写,并寻求到文件的开头。

然后,您可以读,写,或做任何你想。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top