c# base64 streamreader system.io.fileinfo

c# - Conversión de archivo a Base64String y viceversa



decode text (2)

Si, por alguna razón, desea convertir su archivo a una cadena base-64. Como si quisieras pasarlo por internet, etc ... puedes hacerlo

Byte[] bytes = File.ReadAllBytes("path"); String file = Convert.ToBase64String(bytes);

Y correspondientemente, lea de nuevo al archivo:

Byte[] bytes = Convert.FromBase64String(b64Str); File.WriteAllBytes(path, bytes);

El título lo dice todo:

  1. Leí en un archivo tar.gz así
  2. romper el archivo en una matriz de bytes
  3. Convierta esos bytes en una cadena Base64
  4. Convierta esa cadena Base64 nuevamente en una matriz de bytes
  5. Escriba esos bytes nuevamente en un nuevo archivo tar.gz

Puedo confirmar que ambos archivos son del mismo tamaño (el siguiente método devuelve verdadero) pero ya no puedo extraer la versión de copia.

¿Me estoy perdiendo de algo?

Boolean MyMethod(){ using (StreamReader sr = new StreamReader("C:/.../file.tar.gz")) { String AsString = sr.ReadToEnd(); byte[] AsBytes = new byte[AsString.Length]; Buffer.BlockCopy(AsString.ToCharArray(), 0, AsBytes, 0, AsBytes.Length); String AsBase64String = Convert.ToBase64String(AsBytes); byte[] tempBytes = Convert.FromBase64String(AsBase64String); File.WriteAllBytes(@"C:/.../file_copy.tar.gz", tempBytes); } FileInfo orig = new FileInfo("C:/.../file.tar.gz"); FileInfo copy = new FileInfo("C:/.../file_copy.tar.gz"); // Confirm that both original and copy file have the same number of bytes return (orig.Length) == (copy.Length); }

EDITAR: El ejemplo de trabajo es mucho más simple (Gracias a @TS):

Boolean MyMethod(){ byte[] AsBytes = File.ReadAllBytes(@"C:/.../file.tar.gz"); String AsBase64String = Convert.ToBase64String(AsBytes); byte[] tempBytes = Convert.FromBase64String(AsBase64String); File.WriteAllBytes(@"C:/.../file_copy.tar.gz", tempBytes); FileInfo orig = new FileInfo(@"C:/.../file.tar.gz"); FileInfo copy = new FileInfo(@"C:/.../file_copy.tar.gz"); // Confirm that both original and copy file have the same number of bytes return (orig.Length) == (copy.Length); }

¡Gracias!


private String encodeFileToBase64Binary(File file){ String encodedfile = null; try { FileInputStream fileInputStreamReader = new FileInputStream(file); byte[] bytes = new byte[(int)file.length()]; fileInputStreamReader.read(bytes); encodedfile = Base64.encodeBase64(bytes).toString(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return encodedfile; }