C ++中是否有一个创建.bin文件的函数,或者这段代码缺少什么?

时间:2009-05-26 01:22:57

标签: c++ file-io binary-data

我的代码如下:

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

3 个答案:

答案 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作为默认内容初始化文件。

如果它确实存在,它将保留内容。在任何一种情况下,您都会在第一个字节打开文件。