關於擷取本地磁碟盤符

來源:互聯網
上載者:User
關於擷取本地磁碟盤符
有四個基本的函數:GetLogicalDrives, GetLogicalDriveStrings, GetDriveType 和 GetVolumeInformation。第五個是 SetVolumeLabel,如果你願意,可以用它設定卷標。
第一個函數,GetLogicalDrives,返回一個DWORD的位元遮罩(bitmask)值,以告知驅動盤符。“0”表示是磁碟機A,“1”表示磁碟機B,依次類推。
10110 10001 11000 00000 00000 00000 00
這條資訊表示在我的電腦裡有磁碟機:A、C、D、F、J、K、和L。
第二個函數GetLogicalDriveStrings,它返回一個代表所有磁碟機字母的重要字串。每一個磁碟機字母擁有D:/(尾隨一個‘/’)的形式,這裡 D 表示磁碟機盤符,每個字串有一空(null)終結符,結尾處有兩個null。
GetDriveType返回一個代碼,如2代表軟碟機, 3代表硬碟,5代表CD-ROM磁碟機。

1. GetLogicalDriveStrings方法
TCHAR buf[100];
DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
從名字上就知道GetLogicalDriveStrings是獲得盤符的字元形式
這個函數將所有盤符都存在buf中,形式是這樣:
"C:/<NULL>D:/<NULL>E:/<NULL><NULL>"
即盤符之間用NULL隔開,最後一個盤符後面跟兩個NULL
所以可以這樣從buf中提取單個盤符:
for (CString strDisks,TCHAR* s=buf; *s; s+=_tcslen(s)+1)
{
LPCTSTR sDrivePath = s; //單個盤符
strDisks += sDrivePath;
strDisks += " ";
}
開始不知道為什麼要用TCHAR,怕用錯,查MSDN,得到這麼一句
#define char TCHAR; 汗啊~~~

2. GetLogicalDrives方法
DWORD dwDrives;
char a;
CString DriveName;
dwDrives = GetLogicalDrives();
a = 'A';
while (dwDrives > 0)
{
if (dwDrives % 2 == 1)
{
DriveName.Format("%c", a);
GetTreeCtrl().InsertItem(DriveName, m_nImageClose,
m_nImageOpen, TVI_ROOT, TVI_LAST);
}
a++;
dwDrives /= 2;
}
GetLogicalDrives函數返回一個DWORD值,4個位元組32bit,每個bit代表一個盤符,比如bit0代表A盤,但是因為英文字母只有26個,所以最多可以表示26個盤符,不過,一般來說是夠用了

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.