2011-06-04 19 views
6

मेरे पास कई अलग-अलग कार्यक्रमों द्वारा बनाई गई कई डेटा फ़ाइलें हैं। डेटाबेस का डेटाबेस और संस्करण निर्धारित करने का कोई तरीका है जिसका उपयोग डेटा फ़ाइल बनाने के लिए किया गया था।मैं कैसे बता सकता हूं कि डाटाबेस प्रारूप फ़ाइल (या फाइलों का सेट) किस प्रकार बनाया गया था (डेल्फी में)?

उदाहरण के लिए, मैं यह जानना चाहता हूं कि माइक्रोसॉफ्ट एक्सेस, डीबीएएसई, फाइलमेकर, फॉक्सप्रो, एसक्यूएलसाइट या अन्य से कौन सी फाइलें बनाई गई हैं।

मैं वास्तव में बस फाइलों को स्कैन करना चाहता हूं, और स्रोत डेटाबेस और संस्करण सहित उनके बारे में जानकारी प्रदर्शित करना चाहता हूं।

संदर्भ के लिए, मैं डेल्फी 2009 का उपयोग कर रहा

+2

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

+0

@ वॉरेन: मैं विशेष रूप से वंशावली सॉफ्टवेयर देख रहा हूं। वे अपने प्रोग्राम के भीतर डेटाबेस ड्राइवरों का उपयोग करते हैं लेकिन अपने डेटा को अपने स्वामित्व एक्सटेंशन के साथ प्रोजेक्ट फ़ाइलों के रूप में डिस्क पर सहेजते हैं। उदाहरण के लिए, मैं DISQLite3 का उपयोग करूँगा और SQLite प्रारूप में मेरी .bhp फ़ाइल को सहेज लेगा। – lkessler

+0

लेकिन मैं उम्मीद करता हूं कि यह "नामित" डेटाबेस फाइलें अक्सर उनके "मूल" प्रारूप में नहीं होती हैं। मुझे लगता है कि वे अक्सर किसी अन्य (गैर-डीबी) जानकारी और शायद संपीड़न के साथ एक बड़ी संरचना ("कंटेनर") में encapsulated हैं। कम से कम मैं अपनी परियोजनाओं के साथ ऐसा करता हूं। – Andreas

उत्तर

6

सबसे पहले, फ़ाइल एक्सटेंशन की जांच करें। corresponding wikipedia article, या अन्य साइटों पर एक नज़र डालें।

फिर आप फ़ाइल प्रारूप को इसके तथाकथित "हस्ताक्षर" से अनुमान लगा सकते हैं।

यह ज्यादातर प्रथम वर्ण सामग्री है, जो फ़ाइल प्रारूप की पहचान करने में सक्षम है।

आपके पास इस very nice Gary Kessler's वेबसाइट पर एक अपडेट की गई सूची है।

उदाहरण के लिए, यहाँ how our framework identify the MIME format from the file content है, सर्वर साइड पर:

function GetMimeContentType(Content: Pointer; Len: integer; 
    const FileName: TFileName=''): RawUTF8; 
begin // see http://www.garykessler.net/library/file_sigs.html for magic numbers 
    result := ''; 
    if (Content<>nil) and (Len>4) then 
    case PCardinal(Content)^ of 
    $04034B50: Result := 'application/zip'; // 50 4B 03 04 
    $46445025: Result := 'application/pdf'; // 25 50 44 46 2D 31 2E 
    $21726152: Result := 'application/x-rar-compressed'; // 52 61 72 21 1A 07 00 
    $AFBC7A37: Result := 'application/x-7z-compressed'; // 37 7A BC AF 27 1C 
    $75B22630: Result := 'audio/x-ms-wma'; // 30 26 B2 75 8E 66 
    $9AC6CDD7: Result := 'video/x-ms-wmv'; // D7 CD C6 9A 00 00 
    $474E5089: Result := 'image/png'; // 89 50 4E 47 0D 0A 1A 0A 
    $38464947: Result := 'image/gif'; // 47 49 46 38 
    $002A4949, $2A004D4D, $2B004D4D: 
     Result := 'image/tiff'; // 49 49 2A 00 or 4D 4D 00 2A or 4D 4D 00 2B 
    $E011CFD0: // Microsoft Office applications D0 CF 11 E0 = DOCFILE 
     if Len>600 then 
     case PWordArray(Content)^[256] of // at offset 512 
     $A5EC: Result := 'application/msword'; // EC A5 C1 00 
     $FFFD: // FD FF FF 
      case PByteArray(Content)^[516] of 
      $0E,$1C,$43: Result := 'application/vnd.ms-powerpoint'; 
      $10,$1F,$20,$22,$23,$28,$29: Result := 'application/vnd.ms-excel'; 
      end; 
     end; 
    else 
     case PCardinal(Content)^ and $00ffffff of 
     $685A42: Result := 'application/bzip2'; // 42 5A 68 
     $088B1F: Result := 'application/gzip'; // 1F 8B 08 
     $492049: Result := 'image/tiff'; // 49 20 49 
     $FFD8FF: Result := 'image/jpeg'; // FF D8 FF DB/E0/E1/E2/E3/E8 
     else 
      case PWord(Content)^ of 
      $4D42: Result := 'image/bmp'; // 42 4D 
      end; 
     end; 
    end; 
    if (Result='') and (FileName<>'') then begin 
    case GetFileNameExtIndex(FileName,'png,gif,tiff,tif,jpg,jpeg,bmp,doc,docx') of 
     0: Result := 'image/png'; 
     1: Result := 'image/gif'; 
     2,3: Result := 'image/tiff'; 
     4,5: Result := 'image/jpeg'; 
     6: Result := 'image/bmp'; 
     7,8: Result := 'application/msword'; 
     else begin 
     Result := RawUTF8(ExtractFileExt(FileName)); 
     if Result<>'' then begin 
      Result[1] := '/'; 
      Result := 'application'+LowerCase(Result); 
     end; 
     end; 
    end; 
    end; 
    if Result='' then 
    Result := 'application/octet-stream'; 
end; 

आप गैरी केसलर की सूची से, एक समान कार्य का उपयोग कर सकते हैं।

+0

बिल्कुल सही! यही वही है जो मैं जानना चाहता था। और गैरी केसलर का पृष्ठ (कोई संबंध नहीं) एक महान संदर्भ है। – lkessler

+0

क्या परिवार का नाम ... :) –

2

सैकड़ों संस्करणों और स्वरूपों में से (यदि नहीं हजारों) के साथ डेटाबेस इंजन के बहुत सारे हैं। (बाइनरी, सीएसवी, एक्सएमएल ...) उनमें से कई सामग्री की सुरक्षा के लिए एन्क्रिप्टेड हैं। यह प्रत्येक डेटाबेस और हर प्रारूप की पहचान करने के लिए काफी "असंभव" है और यह लगातार परिवर्तन का विषय है।

तो सबसे पहले आपको अपने कार्य को उन डेटाबेस इंजनों की सूची में सीमित करना होगा जिन्हें आप स्कैन करना चाहते हैं। Thats मैं क्या करूँगा ...

+0

ठीक है। अगर मैंने जो सूची दी है, उसके साथ मैं कैसे शुरू करूं। उन्हें पहचानने का सबसे अच्छा तरीका क्या है? यदि कोई अन्य ऐसा है जो आम उपयोग में है और पहचानने में आसान है, तो मैं उन्हें जोड़ सकता हूं। शायद कहीं डेल्फी घटक है जो पहले से ही ऐसा करता है? – lkessler

+0

मुझे गंभीरता से संदेह है कि एक उपकरण है जो "किसी भी डाटाबेस फ़ाइल" की पहचान करेगा। आपके द्वारा उपयोग किए जाने वाले कोई सामान्य लक्षण नहीं हैं, आपको सुनिश्चित करने के लिए सभी संभावित डेटाबेस एक्सेस लाइब्रेरी को मेगा-लाइब्रेरी में जोड़ना होगा। और जब आप किसी विशेष प्रकार की फ़ाइल होती है लेकिन क्षतिग्रस्त हो जाती है तो आप अपने उपकरण के लिए क्या प्रस्तावित करते हैं? आपका प्रश्न अच्छी तरह से परिभाषित नहीं है, या वास्तव में, अंत में उत्तरदायी है। –

2

सबसे पहले, मुझे विश्वास नहीं है कि आप "संभावित प्रारूप" प्रदान करने के बजाय "त्वरित स्कैन" में और अधिक कर सकते हैं। साथ ही, यह कल्पना करना बहुत मुश्किल है कि कोई भी त्वरित तकनीक भरोसेमंद हो सकती है।

डीबीएएसई फाइल आमतौर पर एक्सटेंशन। डीबीएफ का उपयोग करते हैं। फॉक्सप्रो और क्लिपर द्वारा उपयोग किए जाने वाले डीबेस फ़ाइल प्रारूप के वेरिएंट हैं। विकिपीडिया इन्हें xBase के रूप में दस्तावेज करता है। डीबीएस फाइलों को खोलने वाली कोई भी डीबीएएस लाइब्रेरी शायद (ए) दिखा सकती है कि यह वास्तव में इसे खोलकर एक वास्तविक डीबीज़ फ़ाइल है, और (बी) आपको यह देखने की अनुमति देता है कि एक्सबेस फ़ाइल प्रारूप के कौन से समर्थित संस्करण उपयोग में हैं ।

एक्सेस फ़ाइलें आमतौर पर .mdb फ़ाइल प्रारूप का उपयोग कर रही हैं, लेकिन पासवर्ड के साथ एन्क्रिप्ट की जा सकती हैं। आप शायद अपनी खुद की लाइब्रेरी लिख सकते हैं जो आंतरिक रूप से "जेट डेटाबेस इंजन" (एक्सेस द्वारा उपयोग की जाने वाली आंतरिक प्रकार की फ़ाइल) के रूप में आंतरिक सामग्री की पहचान कर सकता है लेकिन सामग्री को नहीं पढ़ सकता है, लेकिन मुझे संदेह है कि पासवर्ड को क्रैक करने से छोटा, आप कर सकते हैं यह भरोसेमंद करो।

फ़ाइलमेकर फ़ाइलों में कई फ़ाइल एक्सटेंशन हो सकते हैं, और उनके आंतरिक फ़ाइल प्रारूप अच्छी तरह से प्रलेखित नहीं हैं। विकिपीडिया के अनुसार, .fm .fp3 .fp5 और .fp7 सामान्य फ़ाइल एक्सटेंशन हैं। आपके पास एक्सेसमेकर डेटाबेस के साथ फ़ाइलमेकर डेटाबेस के साथ समान "पासवर्ड" समस्याएं होंगी। मुझे ओडीबीसी के अलावा डेल्फी में फाइलमेकर फाइलों को पढ़ने के किसी भी तरीके से अवगत नहीं है, और फिर भी, मुझे नहीं लगता कि आप ओडीबीसी द्वारा संचालित डेल्फी में "ओमनी-पाठक" प्रदान कर सकते हैं, क्योंकि ओडीबीसी को सावधानीपूर्वक सेटअप और ज्ञान की आवश्यकता है ओडीबीसी के माध्यम से इसे पढ़ने योग्य होने से पहले मूल फ़ाइल का एक ओडीबीसी डेटा स्रोत में। ब्राउज़/डिस्कवरी एक चरण नहीं है जिसे ओडीबीसी द्वारा समर्थित किया जाता है।

SQLite फ़ाइलों में कोई भी फ़ाइल एक्सटेंशन हो सकता है। इसका पता लगाने का प्रयास करने का सबसे आसान तरीका SQLite का उपयोग करके फ़ाइल को लोड/खोलना होगा और देखें कि यह खुलता है या नहीं।

बाकी की सूची कम या ज्यादा अनंत है, और तकनीक वही होगी। बस अपने डाटामाइम इंजन रोलिंग और अपने कैटरीरी दमासी डाटाबेस डिटेक्टर टूल में लेयर लाइब्रेरी एक्सेस करें।

यदि आप पुराने डेटाबेस प्रारूपों के साथ शुरू करना चाहते हैं, तो आप बीडीई (प्राचीन, लेकिन हे, आप प्राचीन सामान के बारे में बात कर रहे हैं), साथ ही एडीओ का उपयोग करके जांच कर सकते हैं, ऑटो-डिटेक्ट और ओपन करने का प्रयास करने के लिए फ़ाइलें।

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

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