【问题标题】:Get size of block device Linux/Windows获取块设备 Linux/Windows 的大小
【发布时间】:2012-11-27 22:22:03
【问题描述】:

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

【问题讨论】:

    标签: c++ linux windows qt


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 您的回答没有解决 OP 问题的关键部分 - 如何在跨平台应用程序中执行此操作。您建议的工具仅适用于 linux。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2015-11-07
      • 2015-04-22
      • 2011-11-14
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多