Чтение бинарных файлов - PullRequest
0 голосов
/ 26 января 2011

Хотя я подозреваю, что знаю ответ, мне будут интересны ответы людей.

В настоящее время у меня есть приложение VC6, работающее на W2K3, которое читает текстовый файл с использованием следующего (упрощенный код):

string line;
ifstream infile("test.txt",ios::in);
while (!infile.eof())
{
   getline(infile,line);
}
...

Каждая запись в файле имеет поля, разделенные каналом, и код работает нормально благодаря CRLF, хотя поля и записи не имеют фиксированной длины.Теперь проблема в том, что файл будет двоичным из-за того, что некоторые данные упакованы в десятичный формат без знака в дополнение к тексту.По сути, является ли приведенный выше код действительным, если он открыт в виде двоичного файла (разделители и LF сохраняются)?Я попытался провести быстрый тест с некоторыми фиктивными данными, и он, по-видимому, вел себя одинаково.

Насколько я понимаю, двоичные файлы читаются с учетом содержимого данных, поэтому байты могут быть правильно извлечены и безLF-х.Я искал в Интернете и нашел различные варианты C ++ и других языков .NET (опция), но ни одна из них не способна читать по одной строке за раз - даже если данные переменного размера и LF, кажется, не справляются с задачейиспользуя бинарный файл - и я не хочу читать весь файл за один раз, так как он может быть довольно большим (в надежде также не читать по одному символу за раз).

Итак, если вышеприведенное может быть верным, существует ли риск потери данных?Если это не так, другие варианты будут оценены.И если я что-то упустил, пожалуйста, уточните.

1 Ответ

0 голосов
/ 26 января 2011

Если вы полагаетесь на строки, ограниченные CRLF, то если двоичные данные имеют CRLF, вы получите ложный разрыв строки.Кроме того, если двоичные данные содержат значение 124 (вертикальная труба), у вас будут проблемы с определением столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...