C # conversion du fichier en Base64String et retour

Le titre dit tout:

  1. j'ai lu dans un goudron.GZ archive comme ça
  2. divisez le fichier en un tableau d'octets
  3. convertit ces octets en une chaîne Base64
  4. Convertissez cette chaîne Base64 en un tableau d'octets
  5. réécrivez ces octets dans un nouveau tar.fichier 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.

Suis-je absent 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 (grâce à @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!

61
demandé sur darkpbj 2014-09-18 21:59:41

2 réponses

Si vous voulez pour une raison quelconque de convertir votre fichier en base-64 chaîne. Comme si vous voulez le passer via internet, etc... vous pouvez le faire

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

Et en conséquence, relisez le fichier:

Byte[] bytes = Convert.FromBase64String(b64Str);
File.WriteAllBytes(path, bytes);
160
répondu T.S. 2014-09-18 18:16:52
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;  
}

Encoder un fichier en format base64 en java

3
répondu hitesh kumar 2017-09-07 19:04:37