Для записи в файл к объекту ofstream или fstream применяется оператор << (как и при выводе на консоль):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include #include int main()
{
std::ofstream out; // поток для записи
out.open("D:\\hello.txt"); // окрываем файл для записи
if (out.is_open())
{
out << "Hello World!" << std::endl;
}
std::cout << "End of program" << std::endl;
return 0;
}
Данный способ перезаписывает файл заново. Если надо дозаписать текст в конец файла, то для открытия файла нужно использовать режим ios::app:
1
2
3
4
5
6
std::ofstream out("D:\\hello.txt", std::ios::app);
if (out.is_open())
{
out << "Welcome to CPP" << std::endl;
}
out.close();
Чтение из файла
Если надо считать всю строку целиком или даже все строки из файла, то лучше использовать встроенную функцию getline(), которая принимает поток для чтения и переменную, в которую надо считать текст:
#include #include #include int main()
{
std::string line;
std::ifstream in("D:\\hello.txt"); // окрываем файл для чтения
if (in.is_open())
{
while (getline(in, line))
{
std::cout << line << std::endl;
}
}
in.close(); // закрываем файл
std::cout << "End of program" << std::endl;
return 0;
}
Также для чтения данных из файла для объектов ifstream и fstream может применяться оператор >> (также как и при чтении с консоли):
#include #include #include struct Operation
{
int sum; // купленная сумма
double rate; // по какому курсу
Operation(double s, double r) : sum(s), rate(r)
{}
};
int main()
{
std::vector operations = {
Operation(120, 57.7),
Operation(1030, 57.4),
Operation(980, 58.5),
Operation(560, 57.2)
};
std::ofstream out("D:\\operations.txt");
if (out.is_open())
{
for (int i = 0; i < operations.size(); i++)
{
out << operations[i].sum << " " << operations[i].rate << std::endl;
}
}
out.close();
std::vector new_operations;
double rate;
int sum;
std::ifstream in("D:\\operations.txt"); // окрываем файл для чтения
if (in.is_open())
{
while (in >> sum >> rate)
{
new_operations.push_back(Operation(sum, rate));
}
}
in.close();
for (int i = 0; i < new_operations.size(); i++)
{
std::cout << new_operations[i].sum << " - " << new_operations[i].rate << std::endl;
}
return 0;
}
Здесь вектор структур Operation записывается в файл.
1
2
3
4
for (int i = 0; i < operations.size(); i++)
{
out << operations[i].sum << " " << operations[i].rate << std::endl;
}