2010-03-07 21 views
20

Tengo un archivo binario al que quiero agregar un fragmento de datos al final del archivo, ¿cómo puedo lograrlo usando C# y .net? también hay alguna consideración que tomar al escribir al final de un archivo binario? muchas gracias por tu ayuda.¿Cómo anexar datos a un archivo binario?

Respuesta

23
private static void AppendData(string filename, int intData, string stringData, byte[] lotsOfData) 
{ 
    using (var fileStream = new FileStream(filename, FileMode.Append, FileAccess.Write, FileShare.None)) 
    using (var bw = new BinaryWriter(fileStream)) 
    { 
     bw.Write(intData); 
     bw.Write(stringData); 
     bw.Write(lotsOfData); 
    } 
} 
+1

+1 Me gusta esta respuesta porque muestra cómo agregar adicionalmente los tipos de datos nativos a la transmisión como representaciones binarias. –

+2

@jdk - que por supuesto hace un * lote * de presunciones sobre cuáles son los * datos subyacentes *; a 'byte []' seguro, eso siempre tendría sentido ... pero la codificación para los demás podría ser * millas *. –

+1

+1 para el escritor binario, si está escribiendo datos binarios, siempre es mejor usar el escritor –

5

Usted debe ser capaz de hacerlo a través del Stream:

using (FileStream data = new FileStream(path, FileMode.Append)) 
{ 
    data.Write(...); 
} 

En cuanto a las consideraciones - la principal sería: no anexar el soporte de formatos de datos subyacente? Muchos no lo hacen, a menos que sea su propio dato en bruto, o texto, etc. Un documento xml bien formado no admite append (sin considerar el elemento final final), por ejemplo. Tampoco será algo así como un documento de Word. Algunos lo hacen, sin embargo. Asi que; es sus datos de acuerdo con esto ...

0

Uso StreamWriter y que hacen referencia a DotNetPerls, asegúrese de añadir el booleano True a la StreamWriter constructor, si se deja en blanco de lo contrario, va a sobrescribir como de costumbre:

using System.IO; 

class Program 
{ 
    static void Main() 
    { 
    // 1: Write single line to new file 
    using (StreamWriter writer = new StreamWriter("C:\\log.txt", true)) 
    { 
     writer.WriteLine("Important data line 1"); 
    } 
    // 2: Append line to the file 
    using (StreamWriter writer = new StreamWriter("C:\\log.txt", true)) 
    { 
     writer.WriteLine("Line 2"); 
    } 
    } 
} 

Output 
    (File "log.txt" contains these lines.) 

Important data line 1 
Line 2 

Esta es la solución que estaba buscando cuando llegué aquí desde Google, aunque no era un archivo binario, espero que ayude a alguien más.