Tytuł mówi wszystko:
- Czytałem w takim archiwum tar.gz
- rozbić plik na tablicę bajtów
- Przekonwertuj te bajty na ciąg Base64
- Przekonwertuj ten ciąg Base64 z powrotem na tablicę bajtów
- Zapisz te bajty z powrotem do nowego pliku tar.gz
Mogę potwierdzić, że oba pliki mają ten sam rozmiar (poniższa metoda zwraca prawdę), ale nie mogę już wyodrębnić wersji kopii.
Czy coś mi brakuje?
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);
}
EDYCJA: Przykład roboczy jest znacznie prostszy (dzięki @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);
}
Dzięki!