2011-11-23 14 views
8

मैं सी # में एक आवेदन कर रहा हूँ। उस एप्लिकेशन में मेरे पास एक बाइट सरणी है और मैं उस बाइट सरणी डेटा को विशेष स्थिति में लिखना चाहता हूं।सी # में किसी विशेष स्थिति पर डेटा कैसे लिखें?

यहां मैंने निम्नलिखित तर्क का उपयोग किया।

using(StreamWriter writer=new StreamWriter(@"D:\"+ FileName + ".txt",true)) 
{ 
    writer.WriteLine(Encoding.ASCII.GetString(Data),IndexInFile,Data.Length); 
} 

लेकिन जब भी मैं फ़ाइल में डेटा लिख ​​रहा हूं, तो यह लिखने से लिखना शुरू कर देता है।

मेरी हालत यह है कि शुरुआती समय में मेरे पास खाली फ़ाइल है और मैं 10000 स्थिति से फ़ाइल में लिखना शुरू करना चाहता हूं। कृपया मेरी मदद करें। पहले से धन्यवाद।

+0

मुझे 'System.IO.IOException' के रूप में त्रुटि मिल रही है: अपेंड मोड में खोले गए फ़ाइल में पहले मौजूद डेटा को ओवरराइट करने में असमर्थ। System.IO.FileStream.Seek () पर – Dany

उत्तर

10

बाइनरी डेटा को तारों के रूप में लिखने की कोशिश न करें, जैसे आप करते हैं। यह सही ढंग से काम नहीं करेगा। बाइनरी डेटा के रूप में बाइनरी डेटा लिखें। StreamWriter के बजाय आप Stream का उपयोग कर सकते हैं।

using (Stream stream = new FileStream(fileName, FileMode.OpenOrCreate)) 
{ 
    stream.Seek(1000, SeekOrigin.Begin); 
    stream.Write(Data, 0, Data.Length); 
} 
+0

मैंने इसका उपयोग किया लेकिन मुझे System.IO.IOException के रूप में त्रुटि मिल रही है: अपेंड मोड में खोले गए फ़ाइल में पहले मौजूद डेटा को ओवरराइट करने में पिछली तलाश करें। System.IO.FileStream.Seek (Int64 ऑफ़सेट, SeekOrigin मूल) – Dany

+2

पर फिर 'FileMode.Append' का उपयोग न करें। – svick

+0

लेकिन मैं डेटा जोड़ना चाहता हूं। तो मैं क्या करूँगा? – Dany

1

शायद थोड़ा हैकी, लेकिन आप BaseStreamStreamWriter की संपत्ति का उपयोग कर सकते हैं और Seek(long offset, SeekOrigin origin) पर इसका उपयोग कर सकते हैं। (लेकिन, चेतावनी दी के रूप में नहीं हर स्ट्रीम Seek उपयोग कर सकते हैं।)

3

आप इस तरह धारा के अंदर स्थिति सेट कर सकते हैं:

writer.BaseStream.Seek(1000, SeekOrigin.Begin); 

से पहले अपने WriteLine कोड इस जोड़ें।

ध्यान दें कि मैंने यह जांचने के लिए कोई कोड शामिल नहीं किया है कि फ़ाइल के अंदर से कम से कम 1000 वर्ण हैं।

+0

मुझे लगता है कि फ़ाइल खोजना ठीक है, भले ही 'सीक()' ठीक काम करता है, भले ही फ़ाइल पर्याप्त नहीं है। यह लापता भागों को शून्य बाइट्स से भरता है। – svick

1

WriteLine अधिभार प्रयोग कर रहे हैं इस से एक है:

TextWriter.WriteLine Method (Char[], Int32, Int32)

विशेष रूप से IndexInFile तर्क की आपूर्ति की है जहाँ से पढ़ नहीं में सूचकांक शुरू करने के लिए बफर में सूचकांक वास्तव में है जिस फ़ाइल पर लिखना शुरू करना है - यह बताता है कि आप फ़ाइल की शुरुआत में क्यों लिख रहे हैं, जैसा कि आप उम्मीद करते हैं IndexInFile पर नहीं।

आपको पहले फ़ाइल में वांछित स्थिति में अंतर्निहित स्ट्रीम और Seek तक पहुंच प्राप्त करनी चाहिए और फिर फ़ाइल को लिखें।

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