9

ボリューム ID を含む txt ファイルがあります。

ドライブ ボリューム ID (Windows) からドライブ情報 (ドライブ文字、ドライブ サイズなど) を取得する必要があります。

ボリューム ID は次の形式です。

\\?\Volume{XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}

ドライブは、リムーバブル/ローカル ディスクにすることができます

情報がどのように取得されるかは問題ではありません (スクリプト、cpp、c#、Java コードの可能性があります)。

編集:

DriveInfo、Win32_LogicalDisk、Win32_Volume、Win32_PnpDevices を使用しようとしましたが、この奇妙な ID が見つかりませんでした...すべての場合、ID の形式が異なります

アップデート:

やり方がわかった。

次のように Win32_Volume を列挙できます。

ManagementObjectSearcher ms = new ManagementObjectSearcher("Select * from Win32_Volume");    
foreach(ManagementObject mo in ms.Get())   
{
    var guid = mo["DeviceID"].ToString();

    if(guid == myGuid)
        return mo["DriveLetter"];
}
4

4 に答える 4

2

これを使ってみてください

System.Management.ManagementObjectSearcher ms =
new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
foreach (ManagementObject mo in ms.Get())
{
    //Find by ID
}

詳細については、このWin32_DiskDrive クラスを参照してください

于 2012-04-17T06:41:34.783 に答える
2

ボリュームサイズなどは簡単です。通常の Win32 メソッドを使用するだけです。"C:"ドライブとして受け入れる関数は、ボリューム GUID パスも受け入れます(これ\\?\Volume{XXX}が適切に呼び出されるためです)。

「ドライブ文字」は、0、1、またはそれ以上のドライブ文字が存在する可能性があるため、少し注意が必要です。FindFirstVolumeMountPoint / FindNextVolumeMountPoint / FindVolumeMountPointCloseそれらすべてを取得するには、電話する必要があります。

于 2012-04-17T07:34:14.067 に答える
1

これには API 関数があります: GetVolumePathNamesForVolumeName

複数のマウント ポイントを許可するために、null で終了する配列を返します。マウント ポイントが 1 つしかない場合 (通常)、通常のヌル終了文字列として読み取ることができます。

これは、アイドル状態のディスクがスピンアップする可能性があるディスク/ボリュームを列挙するよりも効率的です。

于 2015-10-18T23:27:23.760 に答える
-4

DriveInfo.GetDrives Methodドライブ情報を取得するために使用できます。MSDN のサンプル コードは次のとおりです。

DriveInfo[] allDrives = DriveInfo.GetDrives();

foreach (DriveInfo d in allDrives)
{
    Console.WriteLine("Drive {0}", d.Name);
    Console.WriteLine("  File type: {0}", d.DriveType);
    if (d.IsReady == true)
    {
        Console.WriteLine("  Volume label: {0}", d.VolumeLabel);
        Console.WriteLine("  File system: {0}", d.DriveFormat);
        Console.WriteLine(
            "  Available space to current user:{0, 15} bytes", 
            d.AvailableFreeSpace);

        Console.WriteLine(
            "  Total available space:          {0, 15} bytes",
            d.TotalFreeSpace);

        Console.WriteLine(
            "  Total size of drive:            {0, 15} bytes ",
            d.TotalSize);
    }
}
于 2012-04-17T06:43:12.867 に答える