fstream文件为空(简单的小代码)

时间:2013-11-13 16:18:16

标签: c++ visual-studio-2010 visual-c++

我制作了这个简单的代码来尝试这个fstream file ("....txt"),但文件保持空白! 有人可以帮忙吗? (请注意,我有一个“自制”标题文件,其中包含我通常使用的所有文件和命名空间)

这个小程序应该从 File.txt 中输出所有内容,然后让你有机会在文件中键入新行,以打破你使用break的cin进度。但就像我说文件保持空白

#include <myHead.h>

int main()
{
    string line;
    int i;
    fstream myFile ("File.txt");

    if (myFile.is_open())
    {
        while (getline(myFile,line))
        {
            cout << line << "\n";
        }

        line = "0";

        for(line;line!="break";cin >> line)
    {
        if(line != "break")
            myFile << line;
    }

        myFile.close();

    }
    else
        cout << "error, File.txt cannot be opened!";

    getch();
    return 0;
}

2 个答案:

答案 0 :(得分:4)

读完文件后,文件处于“文件结束到达”的状态,这不是

您需要在写入(追加)之前重置流状态。这是使用流方法clear()完成的。

此外,您可能希望显式打开文件作为输入和输出:ios::in | ios::out

答案 1 :(得分:0)

即使它已经回答了,我想指出一个更好的选择来结束输入。如果你这样做:

#include <string>
#include <iostream>
#include <fstream>

int main(void)
{
    std::fstream file("file");
    std::string buf;

    if (file.is_open())
    {
        std::cout << "READ:" << "\n\n";
        while (getline(file, buf))
        {
            std::cout << buf << "\n";
        }

        file.clear();

        std::cout << '\n' << "WRITE:" << "\n\n";
        while (getline(std::cin, buf))
        {
            file << '\n' << buf;
            file.seekp(0, file.end);
            file.seekg(0, file.end);
        }

        file.close();
    }
    else
    {
        std::cout << "error, file could not be opened.";
    }

    return 0;
}

您可以在Windows上按Ctrl+Z + Enter或在UNIX上按Ctrl+D来结束流。