2015-05-31 8 views
6

क्या .NET ZipArchive प्रविष्टियों का नाम बदलने या स्थानांतरित करने की अनुमति देता है? वर्तमान में इसे बनाए जाने के बाद ZipArchiveEntry का नाम बदलना संभव नहीं है। ऐसा लगता है कि मुझे मूल ZipArchiveEntry की धारा को बदले गए नाम के साथ एक नए ZipArchiveEntry में कॉपी करना होगा।ज़िप संग्रह: क्या मैं एक ZipArchiveEntry का नाम बदल सकता हूं या स्थानांतरित कर सकता हूं?

धन्यवाद मार्टिन

उत्तर

6

मैं नहीं जानता कि क्या "के लिए कदम" का मतलब होगा, अन्य एक प्रविष्टि नाम बदलने के लिए की तुलना में। नियमित डिस्क फ़ाइल सिस्टम में भी, एक "चाल" वास्तव में केवल एक नाम है जहां फ़ाइल नाम का पूरा पथ बदल गया है, न केवल "पत्ता नोड" फ़ाइल नाम। एक .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); 
+0

धन्यवाद, पीटर। आईओ इसकी उम्मीद कर रहा था। मैं केवल उम्मीद कर रहा था कि डेटा कॉपी करने के साथ कुछ और शानदार तरीका हो सकता है। लेकिन अगर यह समाधान मेरे लिए ठीक नहीं है। – msedi

संबंधित मुद्दे