1

我的任务是获取块设备的大小,它必须是跨平台应用程序(Linux/Windows)所以我使用 Qt,我可以使用 Qt 标准类(如 QFile 和 QFileInfo)获取块设备的文件大小吗?我的草图程序无法正常工作:

#include <QtCore/QCoreApplication>
#include <iostream>
#include <QFileInfo>

int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
   QFileInfo info("/dev/sda5");
   if(info.isReadable())
       std::cout<<"/dev/sda1 isReadable\n";
   else
       std::cout<<"Cant read /dev/sda5";

   std::cout<<info.size()<<"\n";

   return a.exec();
}

它显示“/dev/sda5 isReadable”并且大小为零,你能帮我解决这个问题吗?

4

2 回答 2

1

您必须statfs在 Linux 和GetDiskFreeSpaceExWindows 上使用。Qt 似乎没有包装该函数,但它是一段相当短的代码。

设备节点通过通常的 stat 调用报告大小为零。这是事实,您对此无能为力。无论如何,这并不有趣,因为要找出哪个设备安装在某个路径上,需要做很多特定于 unix 的工作。

于 2012-11-27T11:44:03.660 回答
-2

在 Linux 方面,有两个实用程序可以帮助枚举附加的存储分区,具体取决于您的发行版: blkidvol_id。我已经使用这些来识别 Samba 服务器设置脚本的可能分区(及其类型)。可以将他们的输出重定向到一个文本文件并在您的 C 代码中解析结果。HTH。

于 2012-11-27T14:14:36.267 回答