【发布时间】:2023-04-04 10:00:01
【问题描述】:
我是使用 Windows 文件系统的新手,我已经被这个问题困扰了几天。我正在使用 C# 进行编码,我想要的是获得目录的确切“磁盘大小”,就像 Windows 7 上目录的“属性”对话框中显示的那样。
现在我可以得到一个粗略的数字,遍历目录中的每个文件和每个子目录,使用 API GetCompressedFileSize in kernel32.dll 压缩文件和 FileInfo.Length 属性四舍五入到集群的倍数普通文件的大小。
我发现有些文件共享簇(?)(磁盘上的大小不是簇大小的倍数)而其他文件分别占用簇,那么我无法获得磁盘上的确切大小,是否将大小四舍五入为倍数集群大小与否。
还有一些不占用磁盘空间的符号链接,我找不到将它们与普通目录区分开来的方法。我得到的尺寸比实际尺寸大得多,因为我无法避免计算这些链接的尺寸。
我想必须有一个 API 或其他东西来获取磁盘上的确切文件或目录大小。那是什么?还是有更简单/更快的方法来做到这一点?感谢您的帮助!
【问题讨论】:
-
不是真正的答案,但这可能是……stackoverflow.com/questions/3750590/…
-
“磁盘大小”不是一个定义明确的概念,尤其是在文件可以包含非零数据但仍占用零簇的 NTFS 上。 Explorer 使用了一个非常幼稚的定义。
-
Explorer 甚至不会尝试您的要求
标签: c# .net windows pinvoke filesize