Мне нужна помощь в решении моей проблемы.
Я хочу прочитать текстовый файл и работать над ним с помощью указателей.
меня есть, для теста, 3 файлов: а, б и:
istream streamsize строки для чтения ERROR
a.txt содержит 1 строку 29 RTY3050027/C BYZ23451 180 5,790 30,654
b.txt содержит 10 строк
гр .txt содержит 1000 строк
Мой код:
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
ifstream leggiROF("a.txt");
leggiROF.seekg(0, ios::end);
long int dimensione=leggiROF.tellg();
cout << "File length: " << dimensione << " bytes" << endl;
leggiROF.seekg(0, ios::beg);
char *pLeggiROF=nullptr;
pLeggiROF=new char [dimensione];
// if RAM is available
leggiROF.read(pLeggiROF, dimensione);
if(leggiROF)
{
cout << "all characters read successfully.\n";
cout << pLeggiROF << endl;
}
else
/* ADDED LINES */
int offSet=(dimensione-(dimensione-leggiROF.gcount()));
cout << "Error: only " << leggiROF.gcount() << " bytes can be read!" << endl;
leggiROF.read(pLeggiROF, offSet);
cout << pLeggiROF << endl;
leggiROF.close();
delete[] pLeggiROF;
pLeggiROF=nullptr;
return 0;
}
Теперь у меня есть эти результаты с 3-х различных файлов:
a.txt 1 линия
29 RTY3050027/C BYZ23451 180 5,790 30,65
Длина файла: 41 байт
все символы успешно прочитан.
29 RTY3050027/C BYZ23451 180 5,790 30,65
b.txt 10 линий
29 RTY3050027/C BYZ23451 180 5,790 30,654
....
Длина файла: 412 байт
ОШИБКА: только 403 байт может быть прочитан
c.txt 1000 линий
29 RTY3050027/C BYZ23451 180 5,790 30,654
....
Длина файла: 41480 байт
ОШИБКА: только 40481 байт может быть прочитан
Возможная Дубликат [функция tellg() дают неправильный размер файла?] (HTTP : //stackoverflow.com/questions/22984956/tellg-function-give-wrong-size-of-file) –
Спасибо. Я изучаю другие сообщения –