GetLogicalDriveStrings FindFirstVolume和FindNextVolume
文章目錄
- GetLogicalDriveStrings
- 函數功能:
- 函數原型:
- 第一個參數
- 第二個參數
- 返回值:
- 代碼實現
- FindFirstVolume
- 函數功能
- 第一個參數
- 第二個參數
- 返回值
- FindNextVolume
- 函數功能
- 第一個參數
- 第二個參數
- 第三個參數
- 返回值
GetLogicalDriveStrings
GetLogicalDriveStrings(BUFSIZE - 1, szLogicalDriveStrings);函數功能:
獲取一個字串,其中包含了當前所有邏輯驅動器的根驅動器路徑。
函數原型:
DWORD GetLogicalDriveStrings(DWORD nBufferLength, // size of bufferLPTSTR lpBuffer // drive strings buffer );第一個參數
DODOWRD cchBuffer,緩沖區的大小
第二個參數
LPTSTR lpszBuffer,用于裝載邏輯驅動器名稱的字串。每個名字都用一個NULL字符分隔,在最后一個名字后面用兩個NULL表示中止(空中止) 例如a:\\0c:\\0d:\\0h:\\0\0
每一個名字所占三個字節,a:\ 三個字符,然后當printf遇到一個\0輸入就截止了,所以要用while循環,利用最后一個名字后面為兩個\0作為判斷,停止輸出,這樣我們就能輸完所有的名字。
lstrlen(szDrive)的結果為3,代表\0之前有三個字節,也就印證了上面我們的假設,但如果再+1跳過\0后,我們就能繼續輸出下一個名字了;但當我們遇到最后一個名字時,這個名字首地址+4之后遇到的就是\0了。
返回值:
函數執行成功…返回填充完畢的緩沖區字符的的個數…不是長度…char和TCHAR
返回數目都是一樣的…
一般是4的倍數…(形如C:\ 包括之后的一個空字符0)…
如果緩沖區不夠大,則返回值大于nBufferLength
如果失敗…函數返回0…若想獲得更多的錯誤信息,請使用GetLastError函數
所輸出這種 c:\ 叫做邏輯驅動器 名
代碼實現
CHAR szLogicalDriveStrings[BUFSIZE];ZeroMemory(szLogicalDriveStrings, BUFSIZE);//把這個字符串清零GetLogicalDriveStrings(BUFSIZE - 1, szLogicalDriveStrings);//第一個參數就是字符數組的大小(長度)PCHAR szDrive;szDrive = (PCHAR)szLogicalDriveStrings;printf("%d\n", lstrlen(szDrive));/* a:\\0c:\\0d:\\0h:\\0 \0 */do {printf("%s\n", szDrive);szDrive += (lstrlen(szDrive) + 1);} while (*szDrive != '\0');上面那個用字幕表示的,叫做邏輯驅動器名 是簡單的。。。
下面 這種名稱叫做設備名 每個盤都有 這個格式很特殊 這是個完整的名稱 是唯一的 特殊格式的。。。
FindFirstVolume
函數功能
查找主機中的第一個驅動器,返回驅動器設備名
第一個參數
lpszVolumeName:指向驅動器名的內存緩沖區。
第二個參數
cchBufferLength:參數 lpszVolumeName 所指向的緩沖區大小,以字節為單位。
返回值
驅動器查找句柄, 返回一個句柄,FindNextVolume 和 FindVolumeColse 的參數, 如果執行失敗, 返回 NULL。
FindNextVolume
函數功能
查找主機中后繼的邏輯驅動器
第一個參數
hFindVolume: FindFirstVolume 所返回的驅動器查找句柄。
第二個參數
lpszVolumeName:指向保存驅動器名的內存緩沖區
第三個參數
cchBufferLength:參數 lpszVolumeName 所指向的緩沖區大小,以字節為單位。
返回值
返回 BOOL 表示是否成功,如果失敗說明已經查找完成所有邏輯驅動器。
TCHAR buf[BUFSIZE];HANDLE hVol;BOOL bFlag;hVol = FindFirstVolume(buf,BUFSIZE);if (hVol == INVALID_HANDLE_VALUE) {printf("%s\n", buf);return -1;}printf("%s\n", buf);while (FindNextVolume(hVol, buf, BUFSIZE)){printf("%s\n", buf);}bFlag = FindVolumeClose(hVol);
每個盤都有一個唯一的設備名
備注:
2021年堅持學寫博客第7天(學習兩個windows API) 尋夢SS
明日目標:
windows核心編程API函數
總結
以上是生活随笔為你收集整理的GetLogicalDriveStrings FindFirstVolume和FindNextVolume的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MultiByteToWideChar和
- 下一篇: GetLogicalDrives