2012-06-13 33 views
14

Mã của tôi trong C# (asp.net MVC)StreamWriter.Write không ghi vào tệp; không phải ngoại lệ ném

StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt"); 

// write a line of text to the file 
tw.Write("test"); 

Các tập tin được tạo ra nhưng trống. Không có ngoại lệ được ném. Tôi chưa bao giờ thấy điều này trước đây và tôi bị kẹt ở đây; Tôi chỉ cần viết một số đầu ra gỡ lỗi.

Vui lòng thông báo.

+0

Chỉ trong trường hợp nó giúp mọi người có thông tin chi tiết, ngôn ngữ nào?(có lẽ là C++ hoặc C#) – akroy

+0

xem mô tả đã chỉnh sửa – sarsnake

Trả lời

6

Sử dụng

System.IO.File.WriteAllText(@"path\te.txt", "text"); 
+2

đây là câu trả lời hay nhất - nếu bạn biết rằng nội dung đầu ra sẽ không lớn như vậy .. –

40

StreamWriter là đệm theo mặc định, có nghĩa là nó sẽ không đầu ra cho đến khi nó nhận được một Flush() hoặc Close() gọi.

Bạn có thể thay đổi điều đó bằng cách đặt thuộc tính AutoFlush, nếu bạn muốn. Nếu không, chỉ cần thực hiện:

StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt"); 

// write a line of text to the file 
tw.Write("test"); 
tw.Close(); //or tw.Flush(); 
+1

Tôi có cùng vấn đề này - không thể hiểu tại sao nó không được viết mọi thứ đều chính xác. Không biết về tuôn ra/đóng. Tôi nghĩ đây là câu trả lời tốt nhất. (Tôi biết đây là cũ) – alykins

4

Không được xả cũng không đóng cũng không được xử lý. thử này

using (StreamWriter tw = new StreamWriter(@"C:\mycode\myapp\logs\log.txt")) 
{ 
    // write a line of text to the file 
    tw.Write("test"); 
    tw.Flush(); 
} 

hoặc sở thích của tôi

using (FileStream fs = new FileStream(@"C:\mycode\myapp\logs\log.txt" 
            , FileMode.OpenOrCreate 
            , FileAccess.ReadWrite)   ) 
{ 
    StreamWriter tw = new StreamWriter(fs); 
    tw.Write("test"); 
    tw.Flush(); 
} 
0

một sự thay thế

FileStream mystream = new FileStream("C:\\mycode\\myapp\\logs\\log.txt",  
FileMode.OpenOrCreate, FileAccess.Write);   
StreamWriter tw = new StreamWriter(mystream); 
tw.WriteLine("test"); 
tw.close(); 
0

Cố gắng để đóng tập tin hoặc thêm \n vào dòng như

tw.WriteLine("test"); 
tw.Close(); 
1

Ya trong VB.net điều này là không cần thiết nhưng có vẻ như với CSharp bạn cần một cuộc gọi Writer.Flush để buộc viết. Tất nhiên Writer.Close() cũng sẽ buộc sự tuôn ra.

Chúng tôi cũng có thể thiết lập các tài sản AutoFlush của instance StreamWriter:

sw.AutoFlush = true; 
// Gets or sets a value indicating whether the StreamWriter 
// will flush its buffer to the underlying stream after every 
// call to StreamWriter.Write. 

Từ: http://msdn.microsoft.com/en-us/library/system.io.streamwriter.autoflush(v=vs.110).aspx

1

Bạn cần phải hoặc gần hoặc tuôn StreamWriter sau khi hoàn thành văn bản.

tw.Close(); 

hoặc

tw.Flush(); 

Nhưng việc thực hành tốt nhất là để bọc các mã đầu ra trong một tuyên bố sử dụng, vì StreamWriter thực hiện IDisposable:

using (StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt")){ 
// write a line of text to the file 
tw.Write("test"); 
} 
2
 FileStream fs = new FileStream("d:\\demo.txt", FileMode.CreateNew,    FileAccess.Write); 
     StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.ASCII); 
     int data; 

      sw.Write("HelloWorld"); 

     sw.Close(); 
     fs.Close(); 
  • Vấn đề là khi đối tượng StreamWriter được tạo với tham chiếu của FileStrea m Đối tượng, đối tượng SW sẽ luôn luôn mong đợi một số dữ liệu cho đến khi đối tượng SW bị đóng.
  • Vì vậy, Sau khi sử dụng sw.Close(); Tệp đã mở của bạn sẽ bị đóng và sẵn sàng hiển thị Đầu ra.
Các vấn đề liên quan