मैं नहीं जानता कि क्या "के लिए कदम" का मतलब होगा, अन्य एक प्रविष्टि नाम बदलने के लिए की तुलना में। नियमित डिस्क फ़ाइल सिस्टम में भी, एक "चाल" वास्तव में केवल एक नाम है जहां फ़ाइल नाम का पूरा पथ बदल गया है, न केवल "पत्ता नोड" फ़ाइल नाम। एक .zip संग्रह में, यह और भी स्पष्ट है; एक संग्रह में एक "निर्देशिका" या "फ़ोल्डर" केवल उस प्रविष्टि के आधार पर मौजूद होता है जिसमें उस नाम का नाम उस नाम पर होता है (निश्चित रूप से, एक निर्देशिका विभाजक चरित्र द्वारा अलग किया जाता है)। तो "चाल" बिल्कुल "नाम बदलें" जैसा ही है।
जहां तक आप चीजों को नाम बदल सकते हैं कि क्या hellip कोई और; ZipArchive
के साथ, आप एक नई प्रविष्टि मूल की एक प्रति है कि बनाने के लिए होगा, लेकिन नए नाम के साथ, और फिर मूल को हटा दें। ऐसा करने के लिए
कोड इस प्रकार दिखाई देगा:
static void RenameEntry(this ZipArchive archive, string oldName, string newName)
{
ZipArchiveEntry oldEntry = archive.GetEntry(oldName),
newEntry = archive.CreateEntry(newName);
using (Stream oldStream = oldEntry.Open())
using (Stream newStream = newEntry.Open())
{
oldStream.CopyTo(newStream);
}
oldEntry.Delete();
}
, एक विस्तार विधि के रूप में कार्यान्वित के रूप में ऊपर, तो आप इस तरह कॉल कर सकते हैं:
ZipArchive archive = ...; open archive in "update" mode
string oldName = ...,
newName = ...; // names initialized as appropriate
archive.RenameEntry(oldName, newName);
स्रोत
2015-06-01 06:12:45
धन्यवाद, पीटर। आईओ इसकी उम्मीद कर रहा था। मैं केवल उम्मीद कर रहा था कि डेटा कॉपी करने के साथ कुछ और शानदार तरीका हो सकता है। लेकिन अगर यह समाधान मेरे लिए ठीक नहीं है। – msedi