2015-06-17 8 views
6

में काम नहीं कर रहा है कोड का यह टुकड़ा पूरी तरह से वीएस 2010 में काम करता है। अब मेरे पास वीएस 2013 है, यह अब फ़ाइल को नहीं लिखता है। यह त्रुटि या कुछ भी नहीं है। (मुझे नोटपैड ++ में एक चेतावनी मिलती है कि फ़ाइल अपडेट कर दी गई है, लेकिन कुछ भी लिखा नहीं गया है।)स्ट्रीमवाइटर सी #

यह सब ठीक दिखता है। कोई विचार?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      String line; 
      try 
      { 
       //Pass the file path and file name to the StreamReader constructor 
       StreamReader sr = new StreamReader("C:\\Temp1\\test1.txt"); 
       StreamWriter sw = new StreamWriter("C:\\Temp2\\test2.txt"); 

       //Read the first line of text 
       line = sr.ReadLine(); 

       //Continue to read until you reach end of file 
       while (line != null) 
       { 
        //write the line to console window 
        Console.WriteLine(line); 
        int myVal = 3; 
        for (int i = 0; i < myVal; i++) 
        { 
         Console.WriteLine(line); 
         sw.WriteLine(line); 
        } 
        //Write to the other file 
        sw.WriteLine(line); 
        //Read the next line 
        line = sr.ReadLine(); 
       } 

       //close the file 
       sr.Close(); 
       Console.ReadLine(); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("Exception: " + e.Message); 
      } 
      finally 
      { 
       Console.WriteLine("Executing finally block."); 
      } 
     } 
    } 
} 
+0

क्या आप सही निर्देशिका में देख रहे हैं? क्या आपने फाइल को सैनिटी चेक के रूप में खोला है? – user1666620

+0

स्पष्ट रूप से फ्लश करने का प्रयास करें। – Lloyd

+4

मैं कहीं भी नहीं देखता हूं जिसे आप sw कहते हैं। बंद करें(); यदि आप ऐसा करते हैं, तो लेखन फ़्लश हो जाएगा और फ़ाइल बंद हो जाएगी। साथ ही, आपको वास्तव में ब्लॉक का उपयोग करने में StreamReader और StreamWriter को लपेटना चाहिए - वे दोनों IDISposable लागू करते हैं, और जब आप ब्लॉक – thorkia

उत्तर

5

आपको लिखने के बाद StreamWriter Flush() की आवश्यकता है।

डिफ़ॉल्ट रूप से StreamWriter buffered है इसका मतलब है कि यह तब तक आउटपुट नहीं करेगा जब तक कि इसे फ्लश() या बंद() कॉल प्राप्त न हो जाए।

इसके अलावा, आप भी इस तरह इसे बंद करने की कोशिश कर सकते हैं:

sw.Close(); //or tw.Flush(); 

तुम भी StreamWriter.AutoFlush Property

हो जाता है पर एक नजर है या यह बताते हैं कि StreamWriter अपने बफर फ्लश एक मूल्य सेट कर सकते हैं प्रत्येक कॉल के बाद StreamWriter.Write पर अंतर्निहित स्ट्रीम के लिए।

दूसरा विकल्प जो अब बहुत लोकप्रिय और अनुशंसित है, using statement का उपयोग करना है जो इसकी देखभाल करता है।

एक सुविधाजनक वाक्यविन्यास प्रदान करता है जो आईडीस्पोजेबल ऑब्जेक्ट्स का सही उपयोग सुनिश्चित करता है।

उदाहरण:

using(var sr = new StreamReader("C:\\Temp1\\test1.txt")) 
using(var sw = new StreamWriter("C:\\Temp2\\test2.txt")) 
{ 
    ... 
} 
+4

या घटना बेहतर है, इसे –

+2

बंद करें आपको StreamReader और StreamWriter पर "उपयोग" कथन का उपयोग करना चाहिए। – tdbeckett

+0

@tdbeckett: - हाँ मानक और अनुशंसित तरीका है! इसे इंगित करने के लिए धन्यवाद! सर्वोत्तम "सर्वोत्तम अभ्यास" के लिए –

7

आप StreamWriter बंद करने के लिए की जरूरत है। इस तरह:

using(var sr = new StreamReader("...")) 
using(var sw = new StreamWriter("...")) 
{ 
    ... 
} 

यह अपवाद फेंकने पर भी स्ट्रीम बंद कर देगा।

+2

+1। सभी IDISposable ऑब्जेक्ट्स (लगभग हमेशा) एक उपयोग कथन के साथ जोड़ा जाना चाहिए। –

+0

हां, बयानों का उपयोग करने के लिए उपयोग किया जाना चाहिए - स्पष्ट रूप से फ्लश/बंद, इतनी नीरस को स्पष्ट रूप से कॉल करने की आवश्यकता नहीं है। – Polyfun

+0

इसके अलावा लूप को रीडलाइन और तुलना के साथ साफ़ किया जा सकता है ((लाइन = sr.ReadLine())! = Null) { // कंसोल विंडो कंसोल के लिए लाइन लिखें। राइटलाइन (रेखा); int myVal = 3; (int i = 0; i thorkia

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