Tiêu đề nói lên tất cả:
- Tôi đã đọc trong kho lưu trữ tar.gz như vậy
- ngắt tệp thành một mảng byte
- Chuyển những byte đó thành chuỗi Base64
- Chuyển đổi chuỗi Base64 đó trở lại thành một mảng byte
- Ghi lại các byte đó vào tệp tar.gz mới
Tôi có thể xác nhận rằng cả hai tệp đều có cùng kích thước (phương pháp bên dưới trả về true) nhưng tôi không thể giải nén phiên bản sao chép được nữa.
Tui bỏ lỡ điều gì vậy?
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);
}
CHỈNH SỬA: Ví dụ làm việc đơn giản hơn nhiều (Cảm ơn @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);
}
Cảm ơn!
Bạn không thể chỉ thay đổi nội dung của một tệp nén như vậy. Bạn sẽ phải giải nén tệp ở bước 1 thay vì chỉ đọc trực tiếp như hiện tại. Và sau đó, bước 5 cũng sẽ phải nén lại dữ liệu thay vì chỉ ghi ra các byte trực tiếp.
—
itme86,
May mắn thay, vì không có thao tác thực tế của các tập tin bản thân (về cơ bản chỉ cần di chuyển nó từ điểm A đến B) Nhiệm vụ đặc biệt này không đòi hỏi bất kỳ (de /) nén
—
darkpbj