Judulnya mengatakan itu semua:
- Saya membaca di arsip tar.gz seperti itu
- memecah file menjadi array byte
- Ubah byte tersebut menjadi string Base64
- Ubah string Base64 itu kembali menjadi array byte
- Tulis kembali byte tersebut ke file tar.gz baru
Saya dapat mengonfirmasi bahwa kedua file memiliki ukuran yang sama (metode di bawah mengembalikan true) tetapi saya tidak dapat lagi mengekstrak versi salinannya.
Apakah saya melewatkan sesuatu?
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: Contoh kerja jauh lebih sederhana (Terima kasih kepada @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);
}
Terima kasih!
Anda tidak bisa begitu saja mengubah konten file terkompresi seperti itu. Anda harus mendekompresi file pada langkah 1 daripada hanya membacanya secara langsung apa adanya. Dan kemudian langkah 5 juga harus mengompresi ulang data daripada hanya menulis byte secara langsung.
—
itsme86
Untungnya, karena tidak ada manipulasi sebenarnya dari file itu sendiri (pada dasarnya hanya memindahkannya dari titik A ke B) tugas khusus ini tidak memerlukan kompresi (de /)
—
darkpbj