10

私はWindowsでプログラムで利用可能なディスクスペースを把握しようとしています。このために、最初に使用可能なドライブのリストを取得し、次にそれらのどれがローカルドライブであるかを確認してから、各ローカルドライブで使用可能なバイトを照会する必要があります。

APIが2つの関数を提示する最初の部分で少し立ち往生しています:

  1. GetLogicalDriveshttp://msdn.microsoft.com/en-us/library/aa364972(VS.85).aspx)これにより、ビットが設定されたDWORDが提供されます(ドライブAが存在する場合はビット0、ドライブBが存在する場合はビット1など)。 )。
  2. GetLogicalDriveStringshttp://msdn.microsoft.com/en-us/library/aa364975(VS.85).aspx)これにより、実際の文字列が得られます。

後で文字列を使用しますが、クエリには最初のオプションを使用することをお勧めします。ただし、私のシステムでは、DWORDは「unsignedlong」(4バイト)にtypedefされていますが、ドライブ文字の範囲はAZ(26-私は思う-文字)のみです。明らかに、システム上に26を超えるドライブを定義できます(ただし、そうする可能性は低いです)。そのため、これらのドライブに規則があるかどうか疑問に思いました。誰かが私にこれに関するリソースを教えてもらえますか?

ありがとう。

4

3 に答える 3

10
  1. DWORD は、システムに関係なく常に 4 バイトです (Win32 タイプです)。

  2. Windows のドライブ文字の最大値は 26 です。英語のアルファベットは 26 文字しかないためです :)。ただし、Windows では、ボリュームをマウントする方法が 2 つあります。

    • ドライブレターに
    • (NTFS ボリューム上の) ディレクトリに。1 つのボリュームを複数の場所にマウントできます (ただし、1 つのドライブ文字 (IIRC) のみ)。このタスクの GUI は、[コントロール パネル] -> [管理ツール] -> [コンピュータの管理] -> [ディスクの管理]で表示されます。

追加のドライブが既にアクティブなドライブにリダイレクトされ、ほとんどのプログラムで適切に動作しないことを許容して26 個を超えるドライブが必要な場合は、次の方法でさらに割り当てることができます (それらは表示されないことに注意してください)。ファイルエクスプローラーで):

subst ♪: C:\Temp\
cd /D ♪:\

それらを削除するには(再起動しても保持されません):

subst /D ♪:

この記事で説明されているように、すべてのボリュームとそのマウント ポイントを列挙できます。

于 2009-12-22T08:49:18.423 に答える
1

WMIを使用できます。次のWMIクエリは、すべてのドライブを一覧表示する必要があります。

SELECT * FROM Win32_DiskDrive
于 2009-12-22T08:22:59.310 に答える
1

MS-DOS ドライブを列挙するだけでは十分ではありません (ちなみに、最大 26 台のドライブが存在する可能性がありますが、それぞれをセッションでグローバルに 1 回、ローカルに 1 回、合計 2 回バインドできます)。たとえば、ボリュームをマウントできます。ディレクトリに。おそらく、 FindFirstVolumeなどを使用して、システム内のすべてのボリュームを列挙する必要があります。関連する MSDN のを見てください。

于 2009-12-22T08:49:12.877 に答える