日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GetLogicalDriveStrings FindFirstVolume和FindNextVolume

發(fā)布時間:2025/3/21 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GetLogicalDriveStrings FindFirstVolume和FindNextVolume 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • GetLogicalDriveStrings
    • 函數(shù)功能:
    • 函數(shù)原型:
    • 第一個參數(shù)
    • 第二個參數(shù)
    • 返回值:
    • 代碼實現(xiàn)
    • FindFirstVolume
    • 函數(shù)功能
    • 第一個參數(shù)
    • 第二個參數(shù)
    • 返回值
    • FindNextVolume
    • 函數(shù)功能
    • 第一個參數(shù)
    • 第二個參數(shù)
    • 第三個參數(shù)
    • 返回值

GetLogicalDriveStrings

GetLogicalDriveStrings(BUFSIZE - 1, szLogicalDriveStrings);

函數(shù)功能:

獲取一個字串,其中包含了當前所有邏輯驅動器的根驅動器路徑。

函數(shù)原型:

DWORD GetLogicalDriveStrings(DWORD nBufferLength, // size of bufferLPTSTR lpBuffer // drive strings buffer );

第一個參數(shù)

DODOWRD cchBuffer,緩沖區(qū)的大小

第二個參數(shù)

LPTSTR lpszBuffer,用于裝載邏輯驅動器名稱的字串。每個名字都用一個NULL字符分隔,在最后一個名字后面用兩個NULL表示中止(空中止) 例如a:\\0c:\\0d:\\0h:\\0\0
每一個名字所占三個字節(jié),a:\ 三個字符,然后當printf遇到一個\0輸入就截止了,所以要用while循環(huán),利用最后一個名字后面為兩個\0作為判斷,停止輸出,這樣我們就能輸完所有的名字。

lstrlen(szDrive)的結果為3,代表\0之前有三個字節(jié),也就印證了上面我們的假設,但如果再+1跳過\0后,我們就能繼續(xù)輸出下一個名字了;但當我們遇到最后一個名字時,這個名字首地址+4之后遇到的就是\0了。

返回值:

函數(shù)執(zhí)行成功…返回填充完畢的緩沖區(qū)字符的的個數(shù)…不是長度…char和TCHAR

返回數(shù)目都是一樣的…

一般是4的倍數(shù)…(形如C:\ 包括之后的一個空字符0)…

如果緩沖區(qū)不夠大,則返回值大于nBufferLength

如果失敗…函數(shù)返回0…若想獲得更多的錯誤信息,請使用GetLastError函數(shù)

所輸出這種 c:\ 叫做邏輯驅動器

代碼實現(xiàn)

CHAR szLogicalDriveStrings[BUFSIZE];ZeroMemory(szLogicalDriveStrings, BUFSIZE);//把這個字符串清零GetLogicalDriveStrings(BUFSIZE - 1, szLogicalDriveStrings);//第一個參數(shù)就是字符數(shù)組的大小(長度)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

函數(shù)功能

查找主機中的第一個驅動器,返回驅動器設備名

第一個參數(shù)

lpszVolumeName:指向驅動器名的內(nèi)存緩沖區(qū)。

第二個參數(shù)

cchBufferLength:參數(shù) lpszVolumeName 所指向的緩沖區(qū)大小,以字節(jié)為單位。

返回值

驅動器查找句柄, 返回一個句柄,FindNextVolume 和 FindVolumeColse 的參數(shù), 如果執(zhí)行失敗, 返回 NULL。

FindNextVolume

函數(shù)功能

查找主機中后繼的邏輯驅動器

第一個參數(shù)

hFindVolume: FindFirstVolume 所返回的驅動器查找句柄。

第二個參數(shù)

lpszVolumeName:指向保存驅動器名的內(nèi)存緩沖區(qū)

第三個參數(shù)

cchBufferLength:參數(shù) lpszVolumeName 所指向的緩沖區(qū)大小,以字節(jié)為單位。

返回值

返回 BOOL 表示是否成功,如果失敗說明已經(jīng)查找完成所有邏輯驅動器。

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函數(shù)

總結

以上是生活随笔為你收集整理的GetLogicalDriveStrings FindFirstVolume和FindNextVolume的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。