【问题标题】:Convert Free space in to percentage Windows C++将可用空间转换为百分比 Windows C++
【发布时间】:2015-06-27 14:51:40
【问题描述】:

我需要在驱动器中找到可用空间,我有以下代码,但不知道如何将其转换为百分比,

 QString drive = "C:/";
 LPCTSTR         lpDirectoryName = (const wchar_t*)drive.utf16();
 ULARGE_INTEGER lpFreeBytesAvailable;
 ULARGE_INTEGER lpTotalNumberOfBytes;
 ULARGE_INTEGER lpTotalNumberOfFreeBytes;
 BOOL  val =  GetDiskFreeSpaceEx(lpDirectoryName,&lpFreeBytesAvailable,&lpTotalNumberOfBytes,&lpTotalNumberOfFreeBytes);

谁能帮我解决这个问题?

提前致谢, 哈里斯

【问题讨论】:

  • 显然问题是要使用“可用的可用字节数”和“可用的总字节数”中的哪一个。为此,我建议查看文档。或许还有需求规范,如果有的话。
  • 基本上我需要检查驱动器中的可用空间,如果它小于阈值,请从我的应用程序中清除某些目录。

标签: c++ windows qt winapi


【解决方案1】:

考虑到用户配额(推荐),您应该执行以下操作:

double percent_free = 100.0 *(double)lpFreeBytesAvailable.QuadPart / (double)lpTotalNumberOfBytes.QuadPart

如果禁用用户配额(大多数系统),这仍然会在使用整个驱动器时起作用。

请注意,您的代码只能在 Unicode 版本中编译。最好写成:

BOOL val =  GetDiskFreeSpaceEx(_T("C:/"),&lpFreeBytesAvailable,&lpTotalNumberOfBytes,&lpTotalNumberOfFreeBytes);

【讨论】:

  • 您好,感谢您的回答,我没有得到your code will compile only in Unicode builds 实际上我是从 Qt Creator 运行它,我的驱动器将来自 QString。
  • GetDiskFreeSpaceEx 是一个宏,可以根据构建类型 (unicode/ansi) 转换为 GetDiskFreeSpaceExAGetDiskFreeSpaceExW。 _T 宏将创建要匹配的字符串文字。
  • 同时使用上述'type cast' : cannot convert from 'ULARGE_INTEGER' to 'double''_T': identifier not found 时出现错误
  • 我修复了代码。 ULARGE_INTEGER 是一个联合... _T 在 TCHAR.h 中声明。您可以保留与 unicode 相关的代码。这只是一句话。在 Qt 中,最好使用 unicode,因为 unicode 对于 Qt 来说是很自然的。
  • 你不应该再依赖 TCHAR 宏了。将QString.utf16() 的返回值直接传递给GetDiskFreeSpaceExW()。如果您想传递文字,请使用L"C:/"
猜你喜欢
  • 1970-01-01
  • 2012-02-17
  • 2019-07-03
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
相关资源
最近更新 更多