2010-10-17 11 views
9

क्या किसी के पास कोई विचार है कि फ़ाइल आकार के आधार पर ज़िप फ़ाइल दूषित होने पर व्यावहारिक रूप से जांच कैसे करें? आदर्श रूप से यह जांचने का सबसे अच्छा तरीका है कि एक ज़िप दूषित है या नहीं, सीआरसी जांच करना है, लेकिन इसमें काफी समय लग सकता है, खासकर यदि बहुत बड़ी ज़िप फ़ाइलें हैं। मैं बस एक त्वरित फ़ाइल आकार या हेडर चेक करने में सक्षम होने के लिए खुश होगा।एक ज़िप फ़ाइल दूषित होने पर तुरंत जांच कैसे करें?

अग्रिम धन्यवाद।

+0

पसंद की कोई भी भाषा? – birryree

+0

मैं वर्तमान में अपने काम के लिए सी # का उपयोग कर रहा हूं लेकिन भाषा कोई फर्क नहीं पड़ता। – thuantta

उत्तर

3

Section 4.3.7 of this page कहता है कि संपीड़ित आकार बाइट 18 से शुरू होने वाले 4 बाइट्स है। आप इसे पढ़ने और इसे फ़ाइल में आकार की तुलना करने की कोशिश कर सकते हैं।

हालांकि, मुझे लगता है कि यह पता चल सके कि ज़िप फ़ाइल दो कारणों से दूषित है के लिए काफी बेकार है:

  1. कुछ ज़िप फ़ाइलों सिर्फ ज़िप भाग से अधिक बाइट्स होते हैं। उदाहरण के लिए, self-extracting archives में एक निष्पादन योग्य हिस्सा है फिर भी वे अभी भी मान्य ज़िप हैं।
  2. फ़ाइल को आकार बदलने के बिना दूषित किया जा सकता है।

तो, मैं भ्रष्टाचार की जांच की गारंटीकृत विधि के लिए सीआरसी की गणना करने का सुझाव देता हूं।

+0

इसके अलावा, फ़ाइल की लंबाई जानने से पहले कई ज़िप निर्माण उपकरण हेडर लिखेंगे, इसलिए इन बाइट शून्य रहेंगे (स्ट्रीमिंग का समर्थन करने के लिए, संभवतः)। – SimonJ

+0

क्या @ सिमोनजे ने कहा सच है, लेकिन यह भी - बाइट 18 से शुरू संकुचित आकार ज़िप फ़ाइल में एक प्रविष्टि का संपीड़ित आकार है। यह ज़िप फ़ाइल का संपीड़ित आकार नहीं है। – Cheeso

+0

इसके अलावा, यह स्पष्ट हो सकता है, लेकिन यह कहने लायक है: "सीआरसी की गणना करना" फ़ाइल को सत्यापित करने के लिए काम करता है, केवल तभी जब मूल सीआरसी ज्ञात हो। – Cheeso

6

DotNetZip, .NET भाषाओं में ज़िप फ़ाइलों को संभालने के लिए एक मुक्त ओपन सोर्स लाइब्रेरी, CheckZip() विधि का समर्थन करता है जो आप चाहते हैं। आपके विकल्प पर आश्वासन के विभिन्न स्तर उपलब्ध हैं। मूल स्तर सिर्फ मेटाडेटा की स्थिरता की जांच करता है। वास्तविक संपीड़ित डेटा दूषित नहीं है यह सत्यापित करने के लिए सबसे पूर्ण स्तर ज़िप फ़ाइल का एक पूर्ण निष्कर्षण बिटबकेट में करता है।

1

पूरे संग्रह को 'निश्चित रूप से' जांचने के लिए आपको सभी डेटा निकालने की आवश्यकता है (चूंकि संग्रह में संग्रहीत सीआरसी, असम्पीडित डेटा पर गणना की जाती है), और उसके बाद भी आप 100% के लिए सुनिश्चित नहीं हो सकते हैं कि यह नहीं है दूषित (क्योंकि सीआरसी अच्छा है, लेकिन गारंटी नहीं है कि डेटा बदल नहीं गया था)।

0

दूषित फ़ाइल का परीक्षण करने के लिए zip -T का उपयोग करें या नहीं। नमूना दूषित फ़ाइल इस तरह दिखती है:

zip -T filename.zip 
     zip warning: missing end signature--probably not a zip file (did you 
     zip warning: remember to use binary mode when you transferred it?) 
     zip warning: (if you are trying to read a damaged archive try -F) 

zip error: Zip file structure invalid (filename.zip)