写入文件

时间:2010-11-14 12:26:21

标签: c++

我想写一个名为“TEXT”的文件,并在每次运行程序时附加到该文件。它编译但不需要输入。请帮忙;我是编程新手。

这是我正在使用的代码:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

main ()
{
    string line;
    ifstream file;
    file.open("TEXT",ios::in |ios::app);

    if (file.is_open())
    {
        while (file.good() )
        {
            getline (file,line);
            cout << line << endl;
        }
        file.close();
    } else
        cout << "Unable to open file";
}

3 个答案:

答案 0 :(得分:4)

我不确定你想做什么,但这里是文本文件的一些基本输入/输出操作。希望它有所帮助。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    string line;
    ifstream input("TEXT", ios::in); // Opens "TEXT" for reading

    if(input.fail()) 
    {
       cout << "Input error: could not open " << "TEXT" << endl;
       exit(-1);
    }


    while(getline(input, line))
    {
        cout << line << endl; // prints contents of "TEXT"
    }

    input.close(); // close the file

    ofstream output("TEXT", ios::app); // opens "TEXT" for writing
    if(output.fail()) 
    {
       cout << "Output error: could not open " << "TEXT" << endl;
       exit(-1);
    }

    output << "I am adding this line to TEXT" << endl; // write a line to text
    output.close(); // close the file

    return 0;
}

答案 1 :(得分:3)

要写入文件而不是从中读取文件,您基本上需要将file的类型更改为输出流(ofstream),file更改为cincoutfile。您还可以简化一些事情。如果下一个操作成功,流将自动转换为真值,如果失败则流将自动转换为假值,因此您可以通过引用它来测试流。 (例如)while (file.good())没有任何问题,它不像while (file)那样惯用。

#include <iostream>
#include <fstream>
#include <string>
#include <cerrno>
using namespace std;

int main () {
    string line;
    string fname="TEXT";
    /* You can open a file when you declare an ofstream. The path
       must be specified as a char* and not a string.[1]
     */
    ofstream fout(fname.c_str(), ios::app);

    // equivalent to "if (!fout.fail())"
    if (fout) {
        while (cin) {
            getline(cin,line);
            fout << line << endl;
        }
        fout.close();
    } else {
        /* Note: errno won't necessarily hold the file open failure cause
           under some compilers [2], but there isn't a more standard way
           of getting the reason for failure.
         */
        cout << "Unable to open file \"" << fname << "\": " << strerror(errno);
    }
}

参考文献:

  1. Why don't the std::fstream classes take a std::string?
  2. Get std::fstream failure error messages and/or exceptions

答案 2 :(得分:0)

此程序成功打开&#34; TEXT&#34;阅读并将其内容打印到stdout ......


如果您想从输入中读取,则需要readline中的stdin

getline( cin, line );

而不是

getline (file,line);

然后您需要打开file进行撰写(使用ios::out标志而不是ios::in,而不使用ios::app)并在其中写入而不是{{1 }}:

stdout

而不是

file << line << endl;