Я не понимал эту запись

Сообщение от
retmas
ios_base::in | ios_base::out | ios_base::app)
Это ведь просто для примера показано, какие параметры могут быть в качестве ios_base::openmode (или ios_base::in, или out, или append).
Хочу еще спросить о вводе/выводе. Прочитал о функции flush(), терминология неясна.
"Она принудительно записывает содержимое буфера, связанного с потоком, на устройство вывода," - пишет Герберт Шилдт.
Я правильно понял? Устройство вывода здесь - файл, в который идет запись.
А это на самом деле запись в некий низкоуровневый буфер (basic_filebuf или нет?).
Код
somefile << "Lorem ipsum..."
Когда мы делаем flush(), то все, что оставалось в буфере, записывается в файл, т. о., буфер освобождается для последующего внесения туда информации, которая тоже будет записана в файл.
Я правильно представил себе работу потока вывода или нет?
А моя задача решена. Нужно было записать в файл определенную первую строку.
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| #include <vcl>
#include <fstream>
#include <iostream>
#include <string>
#pragma hdrstop
using namespace std;
#pragma argsused // No warning if function args are not in use.
// But there is no warning while compiling project. Why?
int _tmain(int argc, _TCHAR* argv[]) {
fstream fs("test.txt", ios_base::in);
string must_be = "Must be the first line";
string first_line;
if (fs.good()) { // If file stats.txt exists line will be read
cout << "File exists. Let\'s check first line" << endl;
getline(fs, first_line);
}
if (first_line != must_be) { // Let's set the first line
fs.close();
fs.open("test.txt", ios_base::out);
fs.clear();
fs << must_be << "\n";
cout << "First line was changed to " << must_be << "\n";
}
else cout << "The first line is correct" << endl;
if (fs.is_open()) fs.close();
system("pause");
} |
|