Как читать и писать в текстовый файл на С++?
Привет всем, я только начал изучать С++, и я хотел знать, как читать и писать в текстовый файл. Я видел много примеров, но им было трудно понять/следовать, и у них все было много. Я надеялся, что кто-то здесь поможет. Я полный новичок, поэтому мне нужны четкие инструкции. Вот пример того, что я пытаюсь сделать:
#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;
}
Ответы
Ответ 1
Необходимые файлы заголовков:
#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 num1,num2;
in >> num1 >> num2;
или, считая строку время из файла:
string line;
while(getline(in,line)){
//do something with the line
}
записать переменные обратно в файл:
out << num1 << num2;
закрыть файлы:
in.close();
out.close();
Ответ 2
Посмотрите
этот учебник или этот, они оба довольно просты. Если вы заинтересованы в альтернативе, так это то, как вы выполняете файл ввода/вывода в C.
Некоторые вещи, о которых следует помнить, используйте одинарные кавычки '
при работе с одиночными символами и double "
для строк. Также не рекомендуется использовать
Ответ 3
Механизм С++ по умолчанию для файла IO называется потоками.
Потоки могут быть трех видов: входных, выходных и входных.
Входные потоки действуют как источники данных. Для чтения данных из входного потока вы используете оператор >>
:
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;
Очевидно, что входные потоки могут действовать как оба.
В вашем примере кода вы используете объекты потока cout
и cin
.
cout
означает консольный вывод и cin для console-input
. Это предопределенные потоки для взаимодействия с консолью по умолчанию.
Чтобы взаимодействовать с файлами, вам нужно использовать типы ifstream
и ofstream
.
Подобно cin
и cout
, ifstream
обозначает input-file-stream
, а ofstream
обозначает 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;
}
Для дальнейшего чтения вы можете посмотреть С++-вставка ввода-вывода
Ответ 4
Чтобы читать, вы должны создать экземпляр ifsteam, а не потока.
ifstream iusrfile;
Вы должны открыть файл в режиме чтения.
iusrfile.open("usrfile.txt", ifstream::in);
Также это утверждение неверно.
cout<<iusrfile;
Если вы пытаетесь распечатать данные, которые вы читаете из файла, вы должны сделать:
cout<<usr;
Вы можете узнать больше об ifstream и его API здесь