windows - 文件大小 - 磁盘上实际使用的字节数(未分配)

标签 windows file winapi c#-4.0 filesize

Possible Duplicate:
Get Size of file on disk

有没有办法使用 C#/windows 检索磁盘上特定文件使用的实际字节数?

我的应用程序实现了“监视”文件夹,类似于 FileSystemWatcher。一些监视文件夹存在于共享存储(网络和光纤 SAN)上,其他则存在于本地连接的存储上。

文件被完全超出我控制的进程复制到监视文件夹中,大小从 1 GB 到 > 500 GB 不等。由于共享文件系统的性质,希望在“独占”打开文件(FileMode.Open、FileAccess.Read、FileShare.None)时出现异常也是行不通的。

在文件完全复制/关闭之前,这些监视文件夹不应采取操作 - 否则下游可能会出现问题。

为了获取磁盘上使用的“真实”文件大小,我尝试过:

  • 系统.IO.FileInfo
  • GetFileSizeEx(kernel32 p/invoke)
  • FindFirstFileEx(kernel32 p/invoke)
  • GetCompressedFileSize 和 GetDiskFreeSpace(kernel32 p/invoke)

如有任何建议,我们将不胜感激。我似乎遇到了 Windows 操作系统的限制?

最佳答案

没有 API 可以获取文件的“磁盘大小”,您必须根据您对磁盘几何结构的了解自行计算。

关于windows - 文件大小 - 磁盘上实际使用的字节数(未分配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13959228/

相关文章:

c++ - 如何从 C++ 文件中读取数字?

java - 在java中使用vigenere密码加密字节数组

c++ - winapi编程中工具栏自定义图标的使用方法

winforms - 如何在 Win Api 中创建现代菜单?

java - 如何给jvm设置默认参数?

.net - 如何识别第三方应用程序使用的控件?

c# - Windows 上任何单个进程可以处理的最大内存量

java - 如何导出我的java程序并在其他计算机上打开它? (使用Eclipse)

winapi - 如何在 CertCreate 自签名证书函数中指定 key 大小

c# - MSMQ 中的多个队列(性能下降)