我有一个任务来获取块设备的大小,它必须是跨平台应用程序(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”,大小等于零,你能帮我解决这个问题吗?
答案 0 :(得分:1)
您必须在Linux上使用statfs
,在Windows上使用GetDiskFreeSpaceEx
。似乎Qt没有包装那个函数,但它只是一段很短的代码。
设备节点通过常规的stat调用报告大小为零。这是事实,你不能做太多。无论如何,它并不有意思,因为找出哪些设备安装在某条路径上需要进行大量特定于unix的工作。
答案 1 :(得分:-2)
在Linux方面,有两个实用程序可以帮助枚举附加的存储分区,具体取决于您的发行版: blkid 和 vol_id 。我已经使用它们来识别Samba服务器设置脚本的可能分区(及其类型)。可以将其输出重定向到文本文件,并在C代码中解析结果。 HTH。