शीर्षक ही सब कुछ कह देता है:
- मैं एक tar.gz संग्रह में ऐसा पढ़ता हूं
- फ़ाइल को बाइट्स के एक सरणी में तोड़ दें
- उन बाइट्स को बेस 64 स्ट्रिंग में बदलें
- उस Base64 स्ट्रिंग को बाइट्स की एक सरणी में बदलें
- उन बाइट्स को वापस एक नई tar.gz फ़ाइल में लिखें
मैं पुष्टि कर सकता हूं कि दोनों फाइलें समान आकार की हैं (नीचे दी गई विधि सही है) लेकिन मैं अब कॉपी संस्करण नहीं निकाल सकता।
क्या मैं कुछ भूल रहा हूँ?
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);
}
संपादित करें: काम करने का उदाहरण बहुत सरल है (@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);
}
धन्यवाद!
आप इस तरह एक संपीड़ित फ़ाइल की सामग्री को बदल नहीं सकते। आपको फ़ाइल को चरण 1 में विघटित करना होगा बजाय इसके कि इसे सीधे पढ़ें। और फिर चरण 5 इसी तरह सीधे बाइट्स को सीधे लिखने के बजाय डेटा को फिर से लिखना होगा।
—
itsme86
सौभाग्य से, चूंकि फ़ाइल का कोई वास्तविक हेरफेर नहीं हुआ था (मूल रूप से बस इसे बिंदु ए से बी तक ले जाने वाले) इस विशेष कार्य को किसी भी (डी /) संपीड़न की आवश्यकता नहीं है
—
डार्कपबज