2013-12-17 8 views
7

मुझे 36 9 अलग-अलग नामों की एक सूची मिली है और मैं इन नामों को एक सीएसवी फ़ाइल में प्रिंट करना चाहता हूं। जब तक मैं आउटपुट सीएसवी फ़ाइल पर नज़र डालता हूं तब तक सब ठीक चल रहा है और इसमें केवल 251 पंक्तियां हैं। मैंने इसके बजाय .txt पर आउटपुट करने का प्रयास किया है, और फिर भी यह केवल 251 पंक्तियों का उत्पादन करता है। मैंने डीबगर के साथ कदम बढ़ाया और यह अभी भी लेखक को बुला रहा है। राइटलाइन() 36 9 बार।मेरा सी # प्रोग्राम केवल फाइल में 251 पंक्तियां क्यों लिखता है?

क्या वहां कुछ प्रकार के लेखन प्रतिबंध हैं? यदि हां, तो 251 क्यों? मैं सभी 36 9 नाम कैसे लिखूं?

यहाँ सिर्फ मामले में मेरी कोड है:

List<String> names = new List<String>(); 

//Retrieve names from a separate source. 

var writer = new StreamWriter(File.OpenWrite(@"C:names.txt")); 
     for (int i = 0; i < names.Count; i++) 
     { 
      System.Console.WriteLine(names[i].ToString()); 
      writer.WriteLine(names[i].ToString()); 
     } 
     System.Console.Write(names.Count); 

कंसोल पर आउटपुट सभी 369 नामों और names.Count प्रिंट 369.

+3

लेखक को बंद करें – jglouie

+0

क्या आप इनपुट – Raymund

+0

फ्लशिंग के लिए उपयोग की जाने वाली टेक्स्ट फ़ाइल साझा कर सकते हैं, यह शब्द – TravellingGeek

उत्तर

11

आप अपने StreamWriter बंद करने के लिए की जरूरत है, सबसे अच्छा तरीका की तरह एक using ब्लॉक का उपयोग करने के लिए है:

using(StreamWriter writer = new StreamWriter(File.OpenWrite("C:\\names.txt")) { 
    // code here 
} 

using ब्लॉक होगा हमेशा कॉल StreamWriter की .Dispose तरीका है जिसके प्रभाव पड़ता है धारा फ्लश करने के लिए। वर्तमान में आपने अपने StreamWriter उदाहरण में buffered-but-unwritten डेटा खरीदा है।

+0

धन्यवाद! बस लेखक को बुलाओ। क्लोज ने काम किया लेकिन मैं अब से 'उपयोग' का उपयोग करना शुरू कर दूंगा। विश्वास नहीं कर सकता कि यह इतना आसान त्रुटि थी ... –

4

आप नहीं दिखा कहीं भी है कि आप ठीक ढंग से पास writer को दर्शाता है। यदि आपका प्रोग्राम असामान्य रूप से समाप्त हो जाता है, तो लेखक को डिस्क पर कभी भी फ़्लश नहीं किया जाएगा।

using ब्लॉक का उपयोग करने का प्रयास करें।

// NOTE: The is should be C:\names.txt. The posted code is missing a \ 
using (var writer = new StreamWriter(File.OpenWrite(@"C:names.txt"))) 
{ 
    // Your code here 
} 
0
List<String> names = new List<String>(); 
var sb = new StringBuilder() 
//Retrieve names from a separate source. 


     for (int i = 0; i < names.Count; i++) 
     { 
      System.Console.WriteLine(names[i].ToString()); 
      sb.WriteLine(names[i].ToString()); 
     } 
using (var writer = new StreamWriter(File.OpenWrite(@"C:\names.txt"))) 
{ 
    writer.WriteLine(sb.ToString()); 
} 
1

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

+0

बस 'निपटाना() 'को कॉल करना' उपयोग 'जैसा नहीं है, जब तक कि' निपटान()' अंत में ब्लॉक में न हो। –

+0

@EricJ। हाँ तुम सही हो। –

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

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