我有一个简单的实用程序,可以递归地扫描目录(使用NtQueryInformationFile(FileBothDirectoryInformation)
)并计算各种统计信息。它通常针对各种 SMB 共享(托管在 Win12 服务器上)执行。
特别是它计算total-bytes
(使用FILE_BOTH_DIR_INFORMATION::EndOfFile
字段)。
通常所有子目录都报告为大小为 0,但如果我在 5 秒内重新运行我的实用程序(自上次运行以来)——报告一些子目录的大小为 4096。如果我在重新运行实用程序之前数到 5——一切正常。这会导致不稳定的结果和不必要的警报。
所有受影响的目录似乎都有相同的共同点——每一个:
- 要么包含
Thumbs.db
文件 - 或者是包含
Thumbs.db
文件 的目录的父级- ...但并非总是如此——有时父目录大小是稳定的 0
问题:
- 为什么会发生这种情况,为什么 5 秒?
- 如何避免这种情况?我是否应该始终将 subdirs 视为“使用零字节”?
PS 同样的情况也发生在FILE_BOTH_DIR_INFORMATION::AllocationSize
字段上。