C ++ read () проблемы - PullRequest
       51

C ++ read () проблемы

3 голосов
/ 25 октября 2011

У меня проблемы с чтением большого файла в мой собственный буфер в C ++ в Visual Studio 2010. Ниже приведен фрагмент моего кода, где length - это размер файла, в котором я читаю, bytesRead установлен в 0, прежде чем это выполняется, и файл является std :: ifstream.

    buffer = new char[length];
    while( bytesRead < length ){
        file.read( buffer + bytesRead, length - bytesRead );
        bytesRead += file.gcount();
    }
    file.close();

Я заметил, что gcount () возвращает 0 при втором чтении и далее, что означает, что read () не дал мне никаких новых символов, так что это бесконечный цикл. Я хотел бы продолжить читать остальную часть файла. Я знаю, что eofbit устанавливается после первого чтения, хотя в файле больше данных.

Я не знаю, что я могу сделать, чтобы читать дальше. Пожалуйста, помогите.

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

Убедитесь, что вы открываете свой файл в двоичном режиме (std::ios::binary), чтобы избежать любых преобразований новой строки.Использование текстового режима может сделать недопустимым ваше предположение, что длина файла - это количество байтов, которое вы можете прочитать из файла.

В любом случае, рекомендуется проверять состояние потока после чтения.и остановится, если произошла ошибка (скорее может продолжаться бесконечно).

2 голосов
/ 25 октября 2011

Звучит так, как будто ваш поток находится в состоянии сбоя, и в этот момент большинство операций сразу завершится неудачей. Вам нужно clear поток, чтобы продолжить чтение.

...