1

我有一个看起来像这样的代码:

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”。

4

3 回答 3

2

我假设您可以通过打开和关闭文件来做到这一点:

if (GetFileAttributes("test.bin") == INVALID_FILE_ATTRIBUTES)
{
    fstream file;
    file.open("test.bin", ios::out);
    file.close();
}
于 2009-05-26T01:26:44.090 回答
2

您的代码片段是错误的,因为它试图写入您为输入而打开的文件。如果要写入文件,只需使用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 作为默认内容初始化文件。

如果确实存在,它将不理会内容。无论哪种情况,您都会在第一个字节处打开文件。

于 2009-05-26T01:47:16.780 回答
1

一种选择是打开读/写并寻找文件的开头。

然后,您可以阅读、写作或做任何您想做的事情。

于 2009-05-26T01:27:40.003 回答