2011-06-27 20 views
6

Tengo este archivo de texto que contiene campos diferentes. Algunos campos pueden contener datos binarios. Necesito obtener todos los datos en el archivo, pero ahora mismo cuando uso StreamReader, entonces no leerá el bloque de datos binarios y los datos que vienen después de eso. ¿Cuál sería la mejor solución para resolver este problema?StreamReader y datos binarios

Ejemplo:

field1|field2|some binary data here|field3 

Ahora he leído en el archivo de la siguiente manera:

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; 
} 

EDIT: Sé que las posiciones de inicio y fin de los campos binarios.

Respuesta

7

StreamReader no está diseñado para datos binarios. Está diseñado para texto de datos, por lo que se extiende TextReader. Para leer datos binarios, debe usar un Stream, y no intente poner los resultados en una cadena (que es, nuevamente, para datos de texto).

En general, no es una buena idea mezclar los datos binarios y los datos de texto en un archivo como este: qué ocurre si los datos binarios incluyen | símbolo por ejemplo? Es posible que desee incluir los datos binarios en alguna forma codificada por texto, como una variante de base64 que evite |.

+0

No tengo control sobre la fuente de datos, así que tengo que tratar con ella de alguna manera .. – hs2d

+0

@ hs2d: ¿Qué sucede * si los datos binarios incluyen la representación ASCII (o la codificación utilizada) para '|'? ¿Hay algo en los primeros dos campos que te indique la duración esperada? –

+0

no hay nada que me diga la duración esperada. Mira mi otra pregunta. Estoy usando una plantilla para obtener los separadores de campo lo que marca el final de un campo: [link] (http://stackoverflow.com/questions/6479505/c-template-parsing-and-matching-with-text-file) – hs2d

9
+0

Y BinaryWriter para escribir el archivo en un formato binario razonable. – Guillaume

+0

Cuando uso BinaryReader, obtengo todos los campos en binario, entonces, ¿a dónde debo ir desde allí para recuperar los campos que no son datos binarios como cadenas? – hs2d

+0

@ hs2d StringBuilder + BinaryReader.ReadChar, pero si puede cambiar el archivo de origen, use ReadString. – Guillaume