Başlık her şeyi söylüyor:
- Tar.gz arşivinde böyle okudum
- dosyayı bir bayt dizisine böl
- Bu baytları bir Base64 dizesine dönüştürün
- Bu Base64 dizesini bayt dizisine geri dönüştürün
- Bu baytları yeni bir tar.gz dosyasına geri yazın
Her iki dosyanın da aynı boyutta olduğunu onaylayabilirim (aşağıdaki yöntem true değerini döndürür) ancak artık kopya sürümünü çıkaramıyorum.
Bir şey mi kaçırıyorum?
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);
}
DÜZENLEME: Çalışma örneği çok daha basit (@TS sayesinde):
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);
}
Teşekkürler!
Böyle sıkıştırılmış bir dosyanın içeriğini öylece değiştiremezsiniz. Doğrudan olduğu gibi okumak yerine 1. adımda dosyayı açmanız gerekecek. Ve sonra 5. adımın da aynı şekilde baytları doğrudan yazmak yerine verileri yeniden sıkıştırması gerekecektir.
—
itsme86
Neyse ki, dosyanın kendisinin gerçek bir manipülasyonu olmadığından (temelde sadece onu A noktasından B noktasına taşımak) bu özel görev herhangi bir (de /) sıkıştırma gerektirmez
—
darkpbj