Có, điều này là do quá trình vẫn đang ghi vào tệp và bộ đệm không bị xóa.
Thông thường, khi bạn muốn ghi vào một tệp, bạn có thể (đại khái) làm điều gì đó như thế:
1. Tạo/Mở tệp và truy xuất "kênh" (tay cầm) đối với tệp
2. Viết gì đó
3. Xóa bộ đệm/Đóng tệp "kênh" (xử lý) (= chuyển vào đĩa)
(sau đó, lặp lại 1, 2 và 3 khi bạn muốn viết lại điều gì đó)
Tuy nhiên, làm điều gì đó như vậy cũng không sao nếu thỉnh thoảng bạn muốn viết điều gì đó, bởi vì "Mở tay cầm cho tệp" và "Xóa bộ đệm" không phải là "miễn phí" khi nói đến hiệu suất.
Điều này có nghĩa là nếu bạn dự định thường xuyên ghi vào một tệp, thì tốt hơn là chỉ Tạo/Mở tệp
, sau đó Viết
nhiều lần, khi cần thiết và khi bạn hoàn thành Tuôn ra
hoặc Đóng tay cầm (trong ví dụ của tôi ở trên, điều này có nghĩa là 1
, 2
[lặp lại bước 2
khi cần thiết], sau đó, sau đó, 3
)
Và trong khi dữ liệu không được xóa vào đĩa/đã cam kết: bạn không thể dựa vào chúng!
Microsoft cung cấp thêm chi tiết về điều đó:
Xả dữ liệu I/O được đệm hệ thống vào đĩa
[...] Windows lưu trữ dữ liệu trong các hoạt động đọc và ghi tệp trong bộ đệm dữ liệu do hệ thống duy trì để tối ưu hóa hiệu suất của đĩa. Khi một ứng dụng ghi vào một tệp, hệ thống thường đệm dữ liệu và ghi dữ liệu vào đĩa một cách thường xuyên[...]
Các Bộ đệm tập tin tuôn ra Tài liệu API của Windows nói:
[...] Thông thường, các hàm WriteFile và WriteFileEx ghi dữ liệu vào bộ đệm bên trong mà hệ điều hành thường xuyên ghi vào đĩa hoặc ống truyền thông. Hàm FlushFileBuffers ghi tất cả thông tin được lưu vào bộ đệm cho một tệp được chỉ định vào thiết bị hoặc đường ống.
Do tương tác với bộ nhớ đệm ổ đĩa trong hệ thống, chức năng FlushFileBuffers có thể không hiệu quả khi được sử dụng sau mỗi lần ghi vào thiết bị ổ đĩa khi nhiều thao tác ghi đang được thực hiện riêng biệt.[...]
Tạo tập tin tài liệu:
[…]Khi một ứng dụng kết thúc bằng cách sử dụng bộ điều khiển đối tượng do CreateFile trả về, hãy sử dụng hàm CloseHandle để đóng bộ điều khiển. Điều này không chỉ giải phóng tài nguyên hệ thống mà còn có thể có ảnh hưởng rộng hơn đến những thứ như chia sẻ tệp hoặc thiết bị và đưa dữ liệu vào đĩa. Chi tiết cụ thể được ghi chú trong chủ đề này khi thích hợp.[...]
Thông tin thêm về Bộ nhớ đệm tệp có sẵn tại đây, lưu ý rằng:
Siêu dữ liệu hệ thống tệp luôn được lưu trong bộ nhớ cache. Do đó, để lưu trữ bất kỳ thay đổi siêu dữ liệu nào vào đĩa, tệp phải được xóa hoặc được mở bằng FILE_FLAG_WRITE_THROUGH.
Vì vậy, như bạn có thể thấy, hành vi phụ thuộc vào thiết kế của ứng dụng, không có gì lạ khi thấy rằng thỉnh thoảng các tệp nhật ký chỉ được chuyển vào đĩa một lần vì lý do hiệu suất và bạn không thể dựa vào siêu dữ liệu như ngày/ thời gian, kích thước tệp hoặc thậm chí nội dung tệp trong khi ứng dụng vẫn đang ghi vào tệp.