Le titre dit tout:
- J'ai lu dans une archive tar.gz comme ça
- diviser le fichier en un tableau d'octets
- Convertissez ces octets en une chaîne Base64
- Reconvertissez cette chaîne Base64 en un tableau d'octets
- Réécrivez 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 à @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);
}
Merci!
c#
base64
streamreader
system.io.fileinfo
darkpbj
la source
la source
Réponses:
Si vous souhaitez, pour une raison quelconque, convertir votre fichier en chaîne de base 64. Comme si vous voulez le transmettre via Internet, etc ... vous pouvez le faire
Et en conséquence, relisez le fichier:
la source
la source
java
si OP utilisec#
?