2016-10-31 13 views
1

Мне нужна помощь в решении моей проблемы.
Я хочу прочитать текстовый файл и работать над ним с помощью указателей.
меня есть, для теста, 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 байт может быть прочитан

+1

Возможная Дубликат [функция tellg() дают неправильный размер файла?] (HTTP : //stackoverflow.com/questions/22984956/tellg-function-give-wrong-size-of-file) –

+0

Спасибо. Я изучаю другие сообщения –

ответ

0

Я решил, если в необходимости модифицировать еще цикл (см код). Я ввел переменную offSet. Единственное, что последняя строка большого файла (1000 строк) - это грязь.

10 RYN123457/2 BYZ34512 270 32,907 21.221ïû┤öÅh

видеть странные символы после последнего числа (21,221)