如何在C ++中读写文本文件?

时间:2011-05-18 22:43:18

标签: c++

嘿大家,我刚刚开始学习C ++,我想知道如何读写文本文件。我见过很多例子,但是他们都很难理解/遵循,而且各种各样。我希望有人可以提供帮助。我是一个初学者,所以我需要明确的指示。这是我正在尝试做的一个例子:

#include <iostream>
#include <fstream>
using namespace std;
string usreq, usr, yn, usrenter;
int start ()
{
    cout << "Welcome..."
int main ()
{
    cout << "Is this your first time using TEST" << endl;
    cin >> yn;
    if (yn == "y")
        {
            ofstream iusrfile;
            ofstream ousrfile;
            iusrfile.open("usrfile.txt", "w");
            iusrfile >> usr;
            cout << iusrfile;
            iusrfile.close();
            cout << "Please type your Username. \n";
            cin >> usrenter;
            if (usrenter == usr)
            {
            start ();
            }
        }
    else
        {
            cout << "THAT IS NOT A REGISTERED USERNAME.";
        }

    return 0;

}

4 个答案:

答案 0 :(得分:38)

所需的头文件:

#include <iostream>
#include <fstream>

声明输入文件流:

ifstream in("in.txt");

声明输出文件流:

ofstream out("out.txt");

如果你想使用变量作为文件名,而不是硬编码,请使用:

string file_name = "my_file.txt";
ifstream in2(file_name.c_str());

从文件读取变量(假设文件中有2个int变量):

int num1,num2;
in >> num1 >> num2;

或者,从文件中读取一行时间:

string line;
while(getline(in,line)){
//do something with the line
}

将变量写回文件:

out << num1 << num2;

关闭文件:

in.close();
out.close();

答案 1 :(得分:9)

看看 this tutorialthis one,它们都非常简单。如果您对替代方案感兴趣,请按照file I/O in C的方式进行操作。

要记住一些事项,在处理单个字符时使用单引号',对字符串使用双"。在没有必要的情况下使用global variables也是一个坏习惯。

玩得开心!

答案 2 :(得分:4)

文件IO的默认c ++机制称为流。 流可以有三种形式:输入,输出和输入输出。 输入流就像数据源。要从输入流中读取数据,请使用>>运算符:

istream >> my_variable; //This code will read a value from stream into your variable.

运算符>>对不同类型的行为不同。如果在上面的示例中my_variable是一个int,那么将从strem中读取一个数字,如果my_variable是一个字符串,那么将读取一个单词,等等。 您可以通过编写istream >> a >> b >> c;来读取流中的多个值,其中a,b和c将是您的变量。

输出流就像接收器,您可以将数据写入其中。要将数据写入流,请使用<<运算符。

ostream << my_variable; //This code will write a value from your variable into stream.

与输入流一样,您可以通过编写以下内容来为流写入多个值:

ostream << a << b << c;

显然输入输出流可以作为两者。

在您的代码示例中,您使用coutcin流对象。 cout代表控制台输出,代表console-input的cin。这些是预定义的流,用于与默认控制台进行交互。

要与文件进行互动,您需要使用ifstreamofstream类型。 与cincout类似,ifstream代表input-file-streamofstream代表output-file-stream

您的代码可能如下所示:

#include <iostream>
#include <fstream>

using namespace std;

int start()
{
    cout << "Welcome...";

    // do fancy stuff

    return 0;
}

int main ()
{
    string usreq, usr, yn, usrenter;

    cout << "Is this your first time using TEST" << endl;
    cin >> yn;
    if (yn == "y")
    {
        ifstream iusrfile;
        ofstream ousrfile;
        iusrfile.open("usrfile.txt");
        iusrfile >> usr;
        cout << iusrfile; // I'm not sure what are you trying to do here, perhaps print iusrfile contents?
        iusrfile.close();
        cout << "Please type your Username. \n";
        cin >> usrenter;
        if (usrenter == usr)
        {
            start ();
        }
    }
    else
    {
        cout << "THAT IS NOT A REGISTERED USERNAME.";
    }

    return 0;
}

如需进一步阅读,您可能需要查看c++ I/O reference

答案 3 :(得分:2)

要阅读,您应该创建一个ifsteam而不是ofstream的实例。

ifstream iusrfile;

您应该以读取模式打开文件。

iusrfile.open("usrfile.txt", ifstream::in);

此声明也不正确。

cout<<iusrfile;

如果您尝试打印从文件中读取的数据,则应执行以下操作:

cout<<usr;

您可以详细了解ifstream及其API here