1

ブロックデバイスのサイズを取得するタスクがあります。クロスプラットフォームアプリケーション(Linux / Windows)である必要があるため、Qtを使用します。QFileやQFileInfoなどのQt標準クラスを使用してブロックデバイスのファイルサイズを取得できますか?スケッチプログラムが正しく機能しません:

#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/ sda5isReadable」と表示され、サイズはゼロです。この問題を解決するのを手伝ってもらえますか?

4

2 に答える 2

1

statfsLinuxとGetDiskFreeSpaceExWindowsで使用する必要があります。Qtがその関数をラップしていたようには見えませんが、それはかなり短いコードです。

デバイスノードは、通常の統計呼び出しを介してゼロのサイズを報告します。それは事実であり、あなたはそれについて多くをすることはできません。どのデバイスがパスにマウントされているかを見つけるのはUNIX固有の作業が非常に多いため、とにかく面白くありません。

于 2012-11-27T11:44:03.660 に答える
-2

Linux側では、ディストリビューションに応じて、接続されたストレージパーティションの列挙に役立つ2つのユーティリティ blkidvol_idがあります。これらを使用して、Sambaサーバーセットアップスクリプトの可能なパーティション(およびそれらのタイプ)を識別しました。出力をテキストファイルにリダイレクトし、Cコードで結果を解析することができます。HTH。

于 2012-11-27T14:14:36.267 に答える