可能重复:
Get Size of file on disk
有没有办法使用C#/ windows检索磁盘上特定文件的实际字节数?
我的应用程序实现了“watch”文件夹,类似于FileSystemWatcher。某些监视文件夹存在于共享存储(网络和光纤通道SAN)上,其他存储在本地连接的存储上。
文件被完全不受我控制的进程复制到监视文件夹中,大小从1 GB到> 1。 500 GB。由于共享文件系统的性质,在“独占”(FileMode.Open,FileAccess.Read,FileShare.None)打开文件时希望出现异常也不起作用。
在文件完全复制/关闭之前,这些监视文件夹不应该采取措施 - 否则可能会出现下游问题。
要获得磁盘上使用的“实际”文件大小 ,我尝试过:
非常感谢任何建议。好像我正在处理Windows操作系统的限制?
答案 0 :(得分:2)
没有API来获取文件的“磁盘大小”,您必须根据您对磁盘几何的了解自行计算。
答案 1 :(得分:1)
总结一下,这里的问题是其他应用程序通过创建目标来复制文件,然后使用SetFileSize
将文件大小设置为最终大小(假设为1GB),实际上创建了1GB文件完全用零。
然后,应用程序会回到文件的开头并开始按顺序填充数据。目标是确定其他应用程序已达到的“填充数据”中的哪一点。
不幸的答案是没有办法获取这些信息。就文件系统而言,文件存在且其大小为1GB。它恰好在不改变大小的情况下主动更新文件,但是文件元数据中没有审计这些内部更改。文件的各个字节没有“上次修改时间”。
如果您具有特定于域的文件知识(例如,您知道最后一个字节永远不为零),您可以轮询文件的最后一个字节,如果它为零则退回。
答案 2 :(得分:0)
使用GetDiskFreeSpace,您可以获得足够的信息来计算群集大小。向上舍入到该值以获得磁盘上的实际大小,或者它的近似值。