Tôi có một StreamWriter mà luồng cơ bản là FileStream
. Mã sau có đảm bảo rằng FileStream
cũng xóa bộ đệm của nó vào tệp thực sự trên hệ thống tệp hay tôi cần gọi rõ ràng Flush()
trên FileStream
?StreamWriter.Flush() cũng có thể gọi FileStream.Flush() không?
using (var fs = new FileStream("blabla", FileMode.Append)) {
using (var sw = new StreamWriter(fs)) {
sw.WriteLine("Hello, I want to be flushed.");
sw.Flush(); //I need this to also flush onto the file, not just to the FileStream
}
}
Theo MSDN, "Flushing dòng sẽ không tuôn encoder cơ bản của nó, trừ khi bạn gọi một cách rõ ràng Flush hoặc Đóng", nhưng tôi không biết nếu một FileStream có thể được coi là một "bộ mã hóa cơ bản".
Ngoài ra, nếu tôi không chỉ định FileOptions.WriteThrough, tôi có đảm bảo rằng hệ điều hành cuối cùng sẽ ghi dòng được xóa lên đĩa ngay cả khi chương trình bị treo trước khi hai luồng đã bị đóng (giả sử ví dụ không có using {}
khối , chỉ có một cuộc gọi đến Flush()
)?
Trong trường hợp của tôi, tôi cần để luồng mở (để ghi nhật ký), vì vậy tôi không thể sử dụng using {}
khối, nhưng tôi muốn đảm bảo dữ liệu luôn được ghi vào đĩa ngay cả khi chương trình bị treo. Tôi có thể đủ khả năng để mất dữ liệu nếu có tắt nguồn và hệ điều hành chưa được xả lên đĩa, nhưng nếu không tôi cần hệ điều hành để xả ngay cả khi tôi không bao giờ gọi đúng số Close()
trên luồng.
Tại sao bạn không dùng thử? – opewix
Tôi quan tâm để biết liệu hành vi được đảm bảo và chúng ta có thể dựa vào nó, không phải liệu nó hoạt động phần lớn thời gian. –
có nó sẽ tuôn ra dòng cơ bản. Xóa tất cả bộ đệm cho người viết hiện tại và làm cho bất kỳ dữ liệu đệm nào được ghi vào luồng cơ bản. – opewix