2015-06-17 20 views
6

Đoạn mã này hoạt động hoàn hảo trong VS 2010. Bây giờ tôi có VS 2013 nó không còn ghi vào tệp. Nó không có lỗi hay gì cả. (Tôi nhận được một cảnh báo trong Notepad ++ nói rằng tập tin đã được cập nhật, nhưng không có gì được viết.)StreamWriter Không hoạt động trong C#

Tất cả đều ổn với tôi. Bất kỳ ý tưởng?

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

bạn đang tìm kiếm đúng thư mục? bạn đã mở tập tin như là một kiểm tra sanity? – user1666620

+0

Hãy thử xóa rõ ràng. – Lloyd

+4

Tôi không thấy bất cứ nơi nào mà bạn gọi sw.Close(); Nếu bạn làm như vậy, ghi sẽ được xóa và tệp đã đóng. Ngoài ra, bạn thực sự nên xem xét gói StreamReader và StreamWriter bằng cách sử dụng các khối - cả hai đều triển khai IDisposable và sẽ tự động đóng khi bạn rời khối sử dụng – thorkia

Trả lời

5

Bạn cần phải Flush() StreamWriter sau khi ghi.

Theo mặc định StreamWriter được đệm có nghĩa là nó sẽ không xuất ra cho đến khi nó nhận được lệnh Flush() hoặc Close().

Ngoài ra bạn cũng có thể cố gắng để đóng nó lại như thế này:

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

Bạn cũng có thể có một cái nhìn tại StreamWriter.AutoFlush Property

Gets hoặc thiết lập một giá trị chỉ ra liệu StreamWriter sẽ tuôn đệm của nó vào luồng cơ bản sau mỗi cuộc gọi đến StreamWriter.Write.

Tùy chọn khác hiện giờ là một ngày rất phổ biến và được khuyến nghị là sử dụng using statement để xử lý.

Cung cấp cú pháp thuận tiện để đảm bảo sử dụng đúng đối tượng IDisposable.

Ví dụ:

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

Hoặc sự kiện tốt hơn, đóng nó –

+2

Bạn nên sử dụng câu lệnh "using" trên StreamReader và StreamWriter. – tdbeckett

+0

@tdbeckett: - Có đó là tiêu chuẩn và cách được khuyến nghị! Cảm ơn bạn đã chỉ ra điều đó! –

7

Bạn cần phải đóng StreamWriter. Như thế này:

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

Điều này sẽ đóng luồng ngay cả khi ngoại lệ được ném.

+2

+1 để có "Các phương pháp hay nhất" tốt nhất. Tất cả các đối tượng IDisposable nên (hầu như luôn luôn) được ghép nối với một câu lệnh sử dụng. –

+0

Có, sử dụng báo cáo nên được sử dụng - không cần phải gọi rõ ràng Flush/Close, nhiều chỗ ngồi. – Polyfun

+0

Ngoài ra vòng lặp đó có thể được làm sạch bằng cách kết hợp readline và so sánh trong khi ((line = sr.ReadLine())! = Null) { // ghi dòng vào cửa sổ console Console.WriteLine (line); int myVal = 3; cho (int i = 0; i thorkia

Các vấn đề liên quan