2014-09-18 13 views
47

Il titolo dice tutto:C# Conversione di file in Base64String e viceversa

  1. ho letto in un archivio tar.gz in questo modo
  2. pausa il file in un array di byte
  3. Convertire quei byte in una stringa Base64
  4. convertire tale stringa Base64 di nuovo in un array di byte
  5. Scrivi quei byte di nuovo in un nuovo file tar.gz

Posso confermare che entrambi i file hanno la stessa dimensione (il metodo riportato di seguito restituisce true) ma non riesco più a estrarre la versione della copia.

Mi manca qualcosa?

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

EDIT: L'esempio di lavoro è molto più semplice (Grazie a @ T.S.):

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

Grazie!

+0

Si puo' t basta cambiare il contenuto di un file compresso del genere. Dovrai decomprimere il file nel passaggio 1 invece di leggerlo direttamente così com'è. Quindi il passaggio 5 ricomprimerà i dati invece di scrivere direttamente i byte. – itsme86

+0

Fortunatamente, non essendoci alcuna manipolazione effettiva del file stesso (in pratica solo spostandolo dal punto A al punto B) questa particolare attività non richiede alcuna (de /) compressione – darkpbj

risposta

123

Se si desidera, per qualche motivo, convertire il file nella stringa base 64. Come se si desidera passare via internet, ecc ... si può fare questo

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

e, corrispondentemente, rilettura in file:

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

chiara come luce diurna, grazie –

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

encode a file into base64 format in java

+1

Mentre questo codice può rispondere la domanda, fornendo un contesto aggiuntivo su come e/o perché risolve il problema, migliorerebbe il valore a lungo termine della risposta. Leggere questo [come risposta] (http://stackoverflow.com/help/how-to-answer) per fornire una risposta di qualità. – thewaywewere

+0

perché, ancora, abbiamo bisogno di 'java' se OP usa' C# '? –

Problemi correlati