web-dev-qa-db-fra.com

Conversion de fichier en Base64String et retour

Le titre dit tout:

  1. Je lis dans une archive tar.gz comme si
  2. diviser le fichier en un tableau d'octets
  3. Convertir ces octets en une chaîne Base64
  4. Convertir cette chaîne Base64 en un tableau d'octets
  5. Ecrivez ces octets dans un nouveau fichier tar.gz

Je peux confirmer que les deux fichiers ont la même taille (la méthode ci-dessous renvoie true) mais je ne peux plus extraire la version de copie.

Est-ce que je manque quelque chose?

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’exemple de travail est beaucoup plus simple (Merci à @ 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);
}

Merci!

87
darkpbj

Si vous souhaitez, pour une raison quelconque, convertir votre fichier en chaîne en base 64. Comme si vous voulez le transmettre via Internet, etc ... vous pouvez le faire

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

Et en conséquence, relisez dans le fichier:

Byte[] bytes = Convert.FromBase64String(b64Str);
File.WriteAllBytes(path, bytes);
224
T.S.
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;  
}
4
hitesh kumar