Tôi biết điều này có vẻ ngớ ngẩn, nhưng tại sao mã sau chỉ hoạt động nếu tôi Đóng() tệp? Nếu tôi không đóng tệp, toàn bộ luồng sẽ không được ghi.Tại sao tôi phải Đóng() một tệp trong C#?
bước:
- Run mã này vào tải mẫu đơn.
- Đóng biểu mẫu bằng chuột khi nó được hiển thị.
- Chương trình chấm dứt.
Không nên để đối tượng tệp bị xóa hoặc đóng tự động khi nó nằm ngoài phạm vi? Tôi mới đến C#, nhưng tôi được sử dụng để thêm các cuộc gọi đến Close() trong C + + destructors.
// Notes: complete output is about 87KB. Without Close(), it's missing about 2KB at the end.
// Convert to png and then convert that into a base64 encoded string.
string b64img = ImageToBase64(img, ImageFormat.Png);
// Save the base64 image to a text file for more testing and external validation.
StreamWriter outfile = new StreamWriter("../../file.txt");
outfile.Write(b64img);
// If we don't close the file, windows will not write it all to disk. No idea why
// that would be.
outfile.Close();
Bạn có thể tìm thấy các cuộc thảo luận tại http://blogs.msdn.com/b/oldnewthing/archive/ 2010/08/10/10048150.aspx hữu ích trong việc cung cấp giải thích và biện minh cho sự khác biệt giữa C# và C++. Nói chung, tôi sẽ so sánh C++ destructors với C# 'IDisposable' và' using {} '. Và dĩ nhiên, 'using' an toàn hơn gọi' Close' hoặc 'Dispose' một cách rõ ràng, vì nó kết thúc cuộc gọi trong khối' try-finally' để đảm bảo đối tượng được xử lý. – Brian
Cảm ơn tất cả vì sự giúp đỡ rõ ràng và nhanh chóng. – Harvey