【问题标题】:fstream not creating new filefstream没有创建新文件
【发布时间】:2013-06-23 11:41:02
【问题描述】:

我正在尝试学习动态文件访问。我的代码如下:

int main()
{
    dtbrec xrec; // class object
    fstream flh;

    // Doesn't create a new file unless ios::trunc is also given.
    flh.open("database.txt", ios::in | ios::out | ios::binary);

    flh.seekp(0,ios::end);
    xrec.getdata();
    flh.write((char*)&xrec, sizeof(dtbrec));

    flh.close();
}

我认为fstream 默认情况下会创建一个新文件“database.txt”,如果它不存在的话。关于可能出现什么问题的任何想法?

【问题讨论】:

  • 欢迎来到 Stack Overflow!之前有人问过这个问题:stackoverflow.com/questions/8835888/…
  • @ThomWiggers 哇,谢谢,但是如果没有指定 ios::in,文件中的数据是如何存储的?
  • @AlexandruBarbarosie 谢谢,我知道如何使用 ifstream 和 outstream,但想使用 fstream

标签: c++ file-io fstream


【解决方案1】:

关于 fstream 的一些提示:

一个。如果您使用反斜杠来指定目录,例如使用时 fstream f;

f.open("文件夹\文件", ios::out);

不行,反斜杠必须在反斜杠前面,所以正确的方法是:

f.open("文件夹\\文件", ios::out);

b.如果你想创建一个新文件,这是行不通的:

f.open("file.txt", ios::in | ios::out | ios::binary);

正确的方法是首先创建文件,使用 ios::out 或 ios::trunc

f.open("file.txt".ios::out) 或 f.open("file.txt", ios::trunc);

然后

f.open("file.txt", ios::in | ios::out | ios::binary);

c。最后,它可以按照此答案中指定的顺序排列, fstream not creating file

基本上 ios::in 要求已经有一个现有的文件。

【讨论】:

  • 您的示例显示正斜杠,而不是反斜杠。您不需要转义正斜杠。
  • 感谢 Buge 我已经编辑了它,我在学习 fstream 时使用了 backlash。虽然我知道并且现在主要使用正斜杠,但我不喜欢编辑内容(使用反斜杠),因为我个人认为最初在学习 fstream 时,这篇文章可能对新手特别有用,但是您的评论可能对他们也是
【解决方案2】:

尝试使用ofstream,如果文件不存在,它会自动创建一个文件。或者,如果您想在流上同时进行输入和输出,请尝试使用fstream,但您无需指定ios::in|ios::out|ios::binary,因为fstream 会自动为您设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2013-03-18
    • 2020-01-04
    相关资源
    最近更新 更多