2011-06-27 24 views
6

मेरे पास यह टेक्स्ट फ़ाइल है जिसमें विभिन्न फ़ील्ड हैं। कुछ फ़ील्ड में बाइनरी डेटा हो सकता है। मुझे फ़ाइल में सभी डेटा प्राप्त करने की आवश्यकता है, लेकिन अभी StreamReader का उपयोग करते समय यह बाइनरी डेटा ब्लॉक और उसके बाद आने वाले डेटा को नहीं पढ़ेगा। इस समस्या को हल करने का सबसे अच्छा समाधान क्या होगा?स्ट्रीम रीडर और बाइनरी डेटा

उदाहरण:

field1|field2|some binary data here|field3 

अभी मैं इस तरह फ़ाइल में पढ़ें:

public static string _fileToBuffer(string Filename) 
{ 
    if (!File.Exists(Filename)) throw new ArgumentNullException(Filename, "Template file does not exist"); 

    StreamReader reader = new StreamReader(Filename, Encoding.Default, true); 
    string fileBuffer = reader.ReadToEnd(); 
    reader.Close(); 

    return fileBuffer; 
} 

संपादित करें: मैं द्विआधारी क्षेत्रों के आरंभ और अंत पदों पता है।

उत्तर

7

StreamReader बाइनरी डेटा के लिए नहीं बनाया गया है। यह पाठ डेटा के लिए डिज़ाइन किया गया है, यही कारण है कि यह TextReader फैलाता है। बाइनरी डेटा को पढ़ने के लिए, आपको Stream का उपयोग करना चाहिए, और परिणाम को स्ट्रिंग में डालने का प्रयास न करें (जो कि पाठ डेटा के लिए है)।

सामान्य रूप से, इस तरह की फ़ाइल में बाइनरी डेटा और टेक्स्ट डेटा को मिश्रित करना एक बुरा विचार है - बाइनरी डेटा में शामिल होने पर क्या होता है। उदाहरण के लिए प्रतीक? हो सकता है कि आप कुछ टेक्स्ट-एन्कोडेड फॉर्म में बाइनरी डेटा शामिल करना चाहें, जैसे बेस 64 संस्करण से बचें।

+0

मेरे पास डेटा स्रोत पर कोई नियंत्रण नहीं है इसलिए मुझे इसे किसी भी तरह से निपटना होगा .. – hs2d

+0

@ hs2d: तो क्या होता है * बाइनरी डेटा में ASCII (या जो भी एन्कोडिंग का उपयोग किया जाता है) का प्रतिनिधित्व '|' के लिए होता है? क्या पहले दो क्षेत्रों में कुछ भी है जो आपको अपेक्षित लंबाई बताता है? –

+0

कुछ भी नहीं है जो मुझे अपेक्षित लंबाई बताता है। मेरे दूसरे प्रश्न को देखो। मैं फील्ड सेपरेटर्स प्राप्त करने के लिए टेम्पलेट का उपयोग कर रहा हूं जो एक फ़ील्ड के अंत को चिह्नित करता है: [link] (http://stackoverflow.com/questions/6479505/c-template-parsing-and-matching-with-text-file) – hs2d

9

उपयोग BinaryReader

+0

और बाइनरीवाइटर उचित बाइनरी प्रारूप में फ़ाइल लिखने के लिए। – Guillaume

+0

जब मैं बाइनरी रीडर का उपयोग करता हूं तो आईएल बाइनरी में सभी फ़ील्ड प्राप्त करता है, तो मुझे उन क्षेत्रों को वापस पाने के लिए कहां से जाना चाहिए जो बाइनरी डेटा स्ट्रिंग के रूप में नहीं हैं? – hs2d

+0

@ hs2d स्ट्रिंगबिल्डर + बाइनरी रीडर। रीडशेर लेकिन यदि आप स्रोत फ़ाइल बदल सकते हैं, तो रीडस्ट्रिंग का उपयोग करें। – Guillaume

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