__int64 i64FreeBytes
unsigned __int64 lpFreeBytesAvailableToCaller,
lpTotalNumberOfBytes,
lpTotalNumberOfFreeBytes; // variables used to obtain
// the free space on the drive
GetDiskFreeSpaceEx (Manager.capDir,
(PULARGE_INTEGER)&lpFreeBytesAvailableToCaller,
(PULARGE_INTEGER)&lpTotalNumberOfBytes,
(PULARGE_INTEGER)&lpTotalNumberOfFreeBytes);
i64FreeBytes = lpTotalNumberOfFreeBytes;
_tprintf(_T ("Number of bytes free on the drive:%I64u \n"),
lpTotalNumberOfFreeBytes);
我正在开发一个数据管理例程,它是一个Windows CE命令行应用程序。上面的代码显示了如何获取包含文件夹Manager.capdir的特定驱动器上的空闲字节数(它是包含目录的完整路径名的变量)。
我的问题是,上面代码报告的空闲字节数(_tprintf语句)与驱动器的空闲字节数不匹配(我通过右键单击驱动器来检查)。
我想知道这种差异的原因是什么?
答案 0 :(得分:1)
引用(编辑)GetDiskFreeSpaceEx的文档,强调我的:
lpFreeBytesAvailable [out,optional] -
指向接收变量的指针 a上的空闲字节总数 用户可以使用的磁盘 谁与电话有关 线程。强>
此参数可以为NULL。
如果正在使用每用户配额, 该值可能小于总值 磁盘上的空闲字节数。
lpTotalNumberOfBytes [out,optional] -
指向接收变量的指针 磁盘上的总字节数 那些可供用户使用 与调用线程相关联。
此参数可以为NULL。
如果正在使用每用户配额, 该值可能小于总值 磁盘上的字节数。
确定总字节数 在磁盘或卷上,使用 IOCTL_DISK_GET_LENGTH_INFO。
换句话说,这个数字取决于用户,如果你想匹配资源管理器返回的值,请使用lpFreeBytesAvailable
。
答案 1 :(得分:1)
我有一台没有磁盘配额的单用户计算机。我将您的代码发布到基于对话框的MFC应用程序并运行它,使用“C:\”作为lpDirectoryName参数的单一条件,以便我可以与系统报告的驱动器可用空间进行比较。这似乎是合乎逻辑的,因为可用空间仅对驱动器有意义,而不是文件夹。
起初我以为我遇到了类似的问题,但后来我重新检查了支票(我把它绑在了一个按钮上),并得到了与当时属性对话框相同的结果。似乎驱动器上的可用空间是一个相当动态的数量 - 如果它是系统驱动器,这并不是非常令人惊讶 - 甚至没有其他海报正确报告的标准,您可能看不到与属性完全相同的数字对话框在运行时报告。
答案 2 :(得分:0)
有一种可能性浮现在脑海中。也许有人没有考虑到分区丢失的空间(窗口通常在驱动器末端留下8MB作为松弛)。基本上,物理驱动器上剩余的空间与分区所代表的逻辑空间之间存在差异。或者文件系统本身丢失了空间。
我不知道这些是否真的如此,但我会调查它。