2012-04-02 11 views
9

का उपयोग करते हुए डॉक फ़ाइल। जब मैं DocumentFormat.OpenXml dll का उपयोग करके .doc फ़ाइल को पढ़ने की कोशिश कर रहा हूं, तो इसकी फ़ाइल को दूषित डेटा "फ़ाइल में दूषित डेटा" है।DocumentFormat.OpenXml dll

यह डीएल ठीक से .docx फ़ाइल पढ़ रहा है।

क्या दस्तावेज़ Format.OpenXml डीएल .doc फ़ाइल पढ़ने में मदद कर सकता है?

string path = @"D:\Data\Test.doc"; 
string searchKeyWord = @"java"; 

private bool SearchWordIsMatched(string path, string searchKeyWord) 
{ 
    try 
    { 
     using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(path, true)) 
     { 
      var text = wordDoc.MainDocumentPart.Document.InnerText; 
      if (text.Contains(searchKeyWord)) 
       return true; 
      else 
       return false; 
     } 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
} 

उत्तर

2

.doc (Microsoft Word के एक पुराने संस्करण के साथ बनाई गई हैं) एक .docx रूप में एक ही संरचना नहीं है (जो मूल रूप से कुछ एक्सएमएल दस्तावेजों के साथ एक ज़िप फ़ाइल है)।

यदि आपका .doc है 'unzippable' जांच करने के लिए (बस .zip को .doc विस्तार नाम बदलने), आप मैन्युअल रूप से .docx को .doc कन्वर्ट करने के लिए होगा।

13

पुरानी .doc फ़ाइलों में नई .docx फ़ाइलों से एक पूरी तरह से अलग प्रारूप है। तो, नहीं, आप .doc फ़ाइलों को पढ़ने के लिए OpenXml लाइब्रेरी का उपयोग नहीं कर सकते हैं।

ऐसा करने के लिए, आपको या तो पहले फ़ाइलों को मैन्युअल रूप से रूपांतरित करने की आवश्यकता होगी, या आप अब ओपन एक्सएमएल एसडीके के बजाय ऑफिस इंटरऑप का उपयोग करने की आवश्यकता होगी।

+0

अपने जवाब के लिए धन्यवाद एक बार देख ले सकते हैं। –

+0

हाँ मैं कुछ और उत्तरों के लिए इंतजार कर रहा हूँ। –

+0

एक वर्ष बीत गया। अब भी इंतज़ार। :/ –

5

मुझे डर है कि पहले से दिए गए लोगों की तुलना में कोई बेहतर उत्तर नहीं होगा। माइक्रोसॉफ्ट वर्ड डीओसी प्रारूप द्विआधारी है जबकि ओपनएक्सएमएल प्रारूप जैसे कि डीओएक्सएक्स को एक्सएमएल फाइलों को ज़िपित किया गया है। ओपनएक्सएमएल ढांचा केवल उत्तरार्द्ध के साथ काम करने के लिए है।

जैसा कि सुझाव दिया गया है, आपके पास एकमात्र अन्य विकल्प है जो डॉक -> DOCX को परिवर्तित करने के लिए वर्ड इंटरऑप या तृतीय पक्ष लाइब्रेरी का उपयोग करना है जिसे आप ओपनएक्सएमएल लाइब्रेरी के साथ काम कर सकते हैं।

0

आप IFilterTextReader का उपयोग कर सकते हैं।

TextReader reader = new FilterReader(path); 
using (reader) 
{ 
    txt = reader.ReadToEnd(); 
} 

आपको कम से http://www.codeproject.com/Articles/13391/Using-IFilter-in-C

+0

यह आशाजनक लग रहा है। क्या आप परियोजना को भी एक लिंक प्रदान कर सकते हैं? और शायद यह एक स्पष्टीकरण है कि यह क्यों काम करता है? –

+0

क्षमा करें, मेरी अंग्रेजी अच्छी नहीं है ... लेकिन आप इसे देख सकते हैं: http://www.codeproject.com/Articles/13391/Using-IFilter-in-C –