使用<<在fstream上

时间:2012-12-14 12:25:10

标签: c++ file fstream

我正在尝试使用c ++ fstream类将long写入文本文件。在执行之前,该文件已在磁盘上创建。我运行以下代码,可以读取初始值,但无法保存新的,覆盖。我做错了什么?

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>


using namespace std;

int main(int argc, char* argv[]) {

    long f;

    fstream myFile("data.txt", fstream::in|fstream::out);
    cout << "f before: " << f << endl;
    myFile >> f;
    cout << "f after: " << f << endl;
    f++;
    cout << "f after increment: " << f << endl;

    myFile << f;
    myFile.close();

    return 0;
}

之后,我读取文件中的值,但不会更改。我在这里做错了什么?

4 个答案:

答案 0 :(得分:2)

您需要在写入之前回到文件的开头。否则,第二个值在第一个之后写入

答案 1 :(得分:1)

您需要在myFile.seekp(ios::beg);之前添加myFile << f;才能正确更新计数。

如果您想继续追加到最后,请在myFile.clear();之前添加myFile << f;。这将导致内容变为: 1 - &GT; 12 - &GT; 1213 - &GT; 12131214 - &GT; 1213121412131215。这是必需的,因为在读取输入时达到了eof。请注意,get和put指针是same

正如您自己正确指出的那样,这是必需的,因为该文件的数字只是,甚至不是换行符。因此,读操作直接击中EOF并引起问题。要解决它,我们会清除eof状态并继续。

最后添加换行符是您建议的解决方案。在那种情况下

myFile.seekp(ios::beg);
myFile << f<<"\n";

将是完整的解决方案。

答案 2 :(得分:0)

我想到我在这里做错了什么:

我的文件只包含我之后想读写的内容。当我读到文件时,我达到了EOF,然后无法在最后回放或写任何东西。

那就是说,我的解决方案是在文件的末尾包含一个空格或\ n。

有谁知道API为何如此运作?看起来对我来说非常有用......

答案 3 :(得分:-1)

这与这一行有关:

myFile&gt;&gt; F;

删除它,一切正常。我不熟悉fstream,但在我看来,这段代码会尝试强制一个字符串。我也不被允许把它投入很长时间,这让我觉得这绝不是要这样执行的。我建议你阅读如何从文件中检索一个long类型的值,然后再试一次。

编辑:
在阅读了一点this网站建议您必须关闭并重新打开读取和写入之间的文件后,我惊讶于实际修复了它。我不禁想知道为什么,我认为fstream是用于阅读或写作或两者......无论如何,这是你的工作代码:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char* argv[]) {

    long f;

    fstream myFile("data.txt", fstream::in|fstream::out);
    cout << "f before: " << f << endl;
    myFile >> f;
    cout << "f after: " << f << endl;
    f++;
    cout << "f after increment: " << f << endl;
    myFile.close();
    myFile.open("data.txt", fstream::in|fstream::out);

    myFile << f;
    myFile.close();

    return 0;
}