Метод read
Метод read класса ifstream читает заданное количество байт из открытого файла и записывает их в буфер. Первым параметром метод принимает указатель на буфер, куда будут записаны данные, а вторым - количество байт для чтения. Метод возвращает ссылку на поток ifstream, что позволяет вызывать его в цепочке. Если во время чтения произошла ошибка или достигнут конец файла, устанавливается флаг failbit или eofbit.
Синтаксис
ifstream.read(char* buffer, streamsize count)
Пример
Давайте откроем файл test.txt и прочитаем из него 5 байт в буфер:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream file("test.txt");
char buffer[6] = {0};
file.read(buffer, 5);
cout << buffer << endl;
file.close();
return 0;
}
Если файл test.txt содержит строку "abcde", то результат выполнения кода будет:
"abcde"
Пример
Давайте прочитаем весь файл целиком, определив его размер с помощью метода seekg и tellg:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream file("test.txt");
file.seekg(0, ios::end);
streamsize size = file.tellg();
file.seekg(0, ios::beg);
char* buffer = new char[size + 1];
file.read(buffer, size);
buffer[size] = '\0';
cout << buffer << endl;
delete[] buffer;
file.close();
return 0;
}
Если файл test.txt содержит строку "12345", то результат выполнения кода будет:
"12345"
Пример
Давайте проверим, сколько байт удалось прочитать, если запросить больше, чем есть в файле:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream file("test.txt");
char buffer[11] = {0};
file.read(buffer, 10);
cout << "Read: " << file.gcount() << " bytes" << endl;
cout << buffer << endl;
file.close();
return 0;
}
Если файл test.txt содержит строку "abcde", то результат выполнения кода будет:
Read: 5 bytes
"abcde"