2010-05-27 6 views
5

मैं एक ग # घटक है कि निम्नलिखित प्रकार .doc, .pdf, .xls की एक फ़ाइल प्राप्त होगा,प्रोग्रामिक रूप से अपनी बाइनरी सामग्री देखकर फ़ाइल प्रकार ढूंढें। मुमकिन?

.rtf ये एक filestream के रूप में बुला साइबेल लेगेसी एप्लिकेशन द्वारा भेजा जाएगा है।

तो ...

[LegacyApp] >> {बाइनरी फ़ाइल धारा} >> [घटक]

लेगेसी एप्लिकेशन एक ब्लैक बॉक्स कि घटक क्या फ़ाइल प्रकार (बताने के लिए संशोधित किया जा नहीं कर सकते है डॉक्टर, पीडीएफ, एक्सएलएस) यह भेज रहा है। घटक को इस बाइनरी स्ट्रीम को पढ़ने और सही एक्सटेंशन के साथ फाइल सिस्टम पर एक फाइल बनाने की जरूरत है।

कोई विचार?

आपके समय के लिए धन्यवाद।

उत्तर

7

लिनक्स/यूनिक्स आधारित सिस्टम पर आप आप फ़ाइल के बाइट धारा है की पहुंच है सब तो फ़ाइल आदेश का उपयोग कर सकते हैं, लेकिन मुझे लगता है कि आप कोड में इस मैन्युअल रूप से अपने आप को क्या करना चाहते हैं ...

, तो आपको स्वतंत्र रूप से प्रत्येक फ़ाइल प्रकार को संभालने की आवश्यकता होगी।

अधिकांश कार्यक्रमों/घटक है कि ऐसा क्या आप आमतौर पर सोच रहे हैं पहले कुछ बाइट्स पढ़ सकते हैं और उसके आधार पर एक वर्गीकरण हैं। उदाहरण के लिए जीआईएफ फाइलें निम्न में से किसी एक के साथ शुरू होती हैं: GIF87a या GIF89a

फ़ाइल फ़ाइल की शुरुआत में कई फ़ाइल स्वरूपों का एक ही हस्ताक्षर होता है, या एक ही हेडर प्रारूप होता है। यह हस्ताक्षर magic number as described by me on this post के रूप में प्रस्तुत किया जाता है।

लिए एक अच्छा स्थान आरंभ करने के लिए www.wotsit.org पर जाने के लिए है। इसमें फाइल प्रकार द्वारा खोजे जाने योग्य फ़ाइल प्रारूप विनिर्देश शामिल हैं। आप उन महत्वपूर्ण फ़ाइल प्रकारों को देख सकते हैं जिन्हें आप संभालना चाहते हैं और देखें कि क्या आप उन फ़ाइल स्वरूपों में कुछ पहचान कारक पा सकते हैं।

तुम भी कोशिश करते हैं और है कि इस वर्गीकरण करता है एक पुस्तकालय मिल जाए, या फ़ाइल आदेश के स्रोत कोड को देखने के लिए गूगल खोज सकते हैं।

+0

धन्यवाद। इस – user20358

+0

में देखेंगे यदि आप कोड में संभालना चाहते हैं, तो हाँ, आपके एकमात्र विकल्प बाइट्स को देखना और उस पर फ़ाइल प्रकार क्या है, यह पता लगाने के लिए है। अधिकांश फ़ाइलों में डेटा, प्रारूप इत्यादि का वर्णन करने वाले पहले कुछ बाइट्स में कुछ प्रकार का हेडर होता है। – Justin

0

linux पर, वहाँ एक कमांड file कहा जाता है। एक मनमानी फ़ाइल को देखते हुए, यह निर्धारित करने का प्रयास करता है कि यह किस प्रकार की फाइल है। उदाहरण के लिए:

gzip compressed data, from Unix, last modified: Fri Jun 12 20:16:28 2009 
HTML document text 
vCalendar calendar file 
RCS/CVS diff output text 

उन मेरे घर निर्देशिका के चारों ओर झूठ बोल रही है कुछ यादृच्छिक फ़ाइलों से कर रहे हैं।

+0

मैं एक .NET घटक पर काम कर रहा हूं जो विंडोज वातावरण पर तैनात किया जाएगा। – user20358

0

हाँ। file देखें।

और पहिया बदलने नहीं करें। यह ठीक काम करता है कि यह कैसा है।

+2

बेशक यह विशेष पहिया लिनक्स के तहत काम करता है। सी # के साथ लक्षित करने के लिए आम मंच नहीं है। – Jens

+0

@ जेन्स - यह वास्तव में क्रॉस-प्लेटफार्म है। सी # के साथ लक्षित करने के लिए मंच की तरह नहीं। – amphetamachine

+0

धन्यवाद जेन्स, मैं उन सभी प्रकारों के लिए फ़ाइल हस्ताक्षर की तरह कुछ देख रहा था। – user20358

1

आप शायद इस में रुचि: http://en.wikipedia.org/wiki/Magic_number_(programming)

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

+0

धन्यवाद, लेकिन जादू संख्या सभी एमएस ऑफिस फ़ाइलों (डॉक्टर, एक्सएलएस, आरटीएफ) में समान प्रतीत होती है। मुझे इन दोनों के बीच अंतर करने की जरूरत है। – user20358

1

हाँ यह संभव है, एमएस ऑफ़िस (97-2007 या आस) के रूप में सभी D0CF11E के साथ शुरू और फिर वहाँ बाइट 512 पर एक उप-प्रकार मार्कर है फ़ाइलें। http://www.garykessler.net/library/file_sigs.html

इस फ़ाइल स्वरूपों के सभी प्रकार के साथ चारों ओर सबसे अच्छा सूची होने के लिए, लगता है - यह विकिपीडिया पर मुख्य संदर्भ है:

इन के लिए एक संदर्भ में है।

यह नए कार्यालय प्रारूप पर पूरा विवरण नहीं देता है, इसलिए यह मेरे अपने उदाहरणों से है। DOCX फ़ाइलें "पीके" से शुरू होती हैं (तकनीकी रूप से वे ज़िप फ़ाइलें हैं) और उसके बाद स्ट्रिंग "शब्द/_rels/document.xml.rels" होती है जबकि XLSX में "xl/_rels/workbook.xml.rels" होता है।

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