获取块设备Linux / Windows的大小

时间:2012-11-27 11:38:57

标签: c++ linux windows qt

我有一个任务来获取块设备的大小,它必须是跨平台应用程序(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”,大小等于零,你能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您必须在Linux上使用statfs,在Windows上使用GetDiskFreeSpaceEx。似乎Qt没有包装那个函数,但它只是一段很短的代码。

设备节点通过常规的stat调用报告大小为零。这是事实,你不能做太多。无论如何,它并不有意思,因为找出哪些设备安装在某条路径上需要进行大量特定于unix的工作。

答案 1 :(得分:-2)

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