StreamReader и двоичные данные - PullRequest
6 голосов
/ 27 июня 2011

У меня есть этот текстовый файл, который содержит различные поля. Некоторые поля могут содержать двоичные данные. Мне нужно получить все данные в файле, но прямо сейчас при использовании StreamReader он не будет читать двоичный блок данных и данные, которые появятся после этого. Как лучше всего решить эту проблему?

Пример:

field1|field2|some binary data here|field3

Прямо сейчас я читаю в файле, как это:

public static string _fileToBuffer(string Filename)
{
    if (!File.Exists(Filename)) throw new ArgumentNullException(Filename, "Template file does not exist");

    StreamReader reader = new StreamReader(Filename, Encoding.Default, true);
    string fileBuffer = reader.ReadToEnd();
    reader.Close();

    return fileBuffer;
}

РЕДАКТИРОВАТЬ: Я знаю начальную и конечную позиции двоичных полей.

Ответы [ 2 ]

9 голосов
/ 27 июня 2011

использование BinaryReader

7 голосов
/ 27 июня 2011

StreamReader не предназначен для двоичных данных. Он предназначен для текстовых данных, поэтому он расширяет TextReader. Чтобы читать двоичные данные, вы должны использовать Stream, а не пытаться поместить результаты в строку (что опять-таки для текстовых данных).

В общем, плохая идея смешивать двоичные данные и текстовые данные в таком файле, как это - что произойдет, если двоичные данные содержат | символ например? Возможно, вы захотите включить двоичные данные в некоторую текстовую форму, например, в варианте base64, избегая |.

...