4.1 使用GetLogicalDriveStrings獲取驅(qū)動器根路徑

效果

源碼

#include

#include

#include

//不要用Unicode編碼,反正我用這個(gè)編碼后不能正確執(zhí)行

#define BUFSIZE 1024//文件系統(tǒng)名稱緩沖區(qū)的長度

BOOL GetDirverInfo(LPSTR szDrive);//聲明函數(shù)

void main(int argc, PCHAR argv[]){

CHAR szLogicalDriveStrings[BUFSIZE];//保存所有卷緩存的空間

PCHAR szDrive;

ZeroMemory(szLogicalDriveStrings, BUFSIZE);//將指定空間用0填充

GetLogicalDriveStrings(BUFSIZE - 1, szLogicalDriveStrings);//保存類似于 C:\\0D:\\0\0...

szDrive = (PCHAR)szLogicalDriveStrings;//指向保存了所有卷緩存的空間

do{

if (!GetDirverInfo(szDrive)){

printf("獲取信息錯(cuò)誤: %d\n", GetLastError());

}

szDrive += (lstrlen(szDrive) + 1);//看不懂...

} while (*szDrive != '\x00');//指向的值不是0就循環(huán)

getchar();

}

//獲取驅(qū)動器信息

//參數(shù):要獲取的驅(qū)動器根路徑,如 C:\ */

BOOL GetDirverInfo(LPSTR szDrive){

UINT uDriveType;//驅(qū)動器的類型

DWORD dwVolumeSerialNumber;//卷序號

DWORD dwMaximumComponentLength;//最大長度

DWORD dwFileSystemFlags;//標(biāo)志

CHAR szFileSystemNameBuffer[MAX_PATH];//接收文件系統(tǒng)名稱的緩沖區(qū),例如FAT文件系統(tǒng)或NTFS文件系統(tǒng)

CHAR szDriveName[MAX_PATH];//卷名的緩沖區(qū)

printf("驅(qū)動器: %s\n", szDrive);

uDriveType = GetDriveType(szDrive);//判斷驅(qū)動器的類型

switch (uDriveType){

case DRIVE_UNKNOWN:

printf("不能確定驅(qū)動器類型\n");

break;

case DRIVE_NO_ROOT_DIR:

printf("根路徑無效,例如:在該路徑上備用安裝卷\n");

break;

case DRIVE_REMOVABLE:

printf("驅(qū)動器是一種可移動介質(zhì)的類型,例如:軟盤驅(qū)動器或可移動硬盤\n");

break;

case DRIVE_FIXED:

printf("驅(qū)動器是一種不能移動的類型,例如:固定硬盤驅(qū)動器\n");

break;

case DRIVE_REMOTE:

printf("驅(qū)動器是遠(yuǎn)程(網(wǎng)絡(luò))驅(qū)動器\n");

break;

case DRIVE_CDROM:

printf("驅(qū)動器是一個(gè)CD-ROM驅(qū)動器\n");

case DRIVE_RAMDISK:

printf("驅(qū)動器是RAM(內(nèi)存)磁盤\n");

break;

default:

break;

}

if (!GetVolumeInformation(//獲得磁盤卷的信息

szDrive,//指向包含要描述的卷的根目錄的字符串的指針

szDriveName,//指向接收指定卷名稱的緩沖區(qū)的指針

MAX_PATH,//緩沖區(qū)的長度,TCHAR中最大緩沖區(qū)的大小是MAX_PATH + 1

&dwVolumeSerialNumber,//指向接收卷序號的變量的指針

&dwMaximumComponentLength,//指向一個(gè)變量的指針.用來保存文件系統(tǒng)支持的最大文件名長度

&dwFileSystemFlags,//指向接收與指定文件系統(tǒng)關(guān)聯(lián)的標(biāo)志的變量的指針

szFileSystemNameBuffer,//指向緩沖區(qū)的指針

BUFSIZE//文件系統(tǒng)名稱緩沖區(qū)的長度

)){

//MessageBox(NULL, "xxx", "xxx", MB_OK);

return FALSE;

}

if (0 != lstrlen(szDriveName)){//如果卷名不為空

printf("驅(qū)動器名稱: %s\n", szDriveName);

}

printf("卷的序列號: %u\n", dwVolumeSerialNumber);

printf("最大組件長度: %u\n", dwMaximumComponentLength);

printf("系統(tǒng)類型: %s\n", szFileSystemNameBuffer);

if (dwFileSystemFlags & FILE_CASE_PRESERVED_NAMES){

printf("指定的卷支持在磁盤上保存名稱時(shí)保留文件名的大小寫。\n");

}

if (dwFileSystemFlags & FILE_CASE_SENSITIVE_SEARCH){

printf("指定的卷支持區(qū)分大小寫的文件名。\n");

}

if (dwFileSystemFlags & FILE_FILE_COMPRESSION){

printf("指定的卷支持基于文件的壓縮。\n");

}

if (dwFileSystemFlags & FILE_NAMED_STREAMS){

printf("指定的卷支持命名流。\n");

}

if (dwFileSystemFlags & FILE_PERSISTENT_ACLS){

printf("指定的卷保留并強(qiáng)制訪問控制列表(ACL)。\n");

}

if (dwFileSystemFlags & FILE_READ_ONLY_VOLUME){

printf("指定的卷是只讀的。\n");

}

if (dwFileSystemFlags & FILE_SEQUENTIAL_WRITE_ONCE){

printf("指定的卷支持單個(gè)順序?qū)懭搿n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_ENCRYPTION){

printf("指定的卷支持加密文件系統(tǒng)(EFS)。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_EXTENDED_ATTRIBUTES){

printf("指定的卷支持?jǐn)U展屬性。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_HARD_LINKS){

printf("指定的卷支持硬鏈接。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_OBJECT_IDS){

printf("指定的卷支持對象標(biāo)識符。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_OPEN_BY_FILE_ID){

printf("文件系統(tǒng)支持FileID打開。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_REPARSE_POINTS){

printf("指定的卷支持重解析點(diǎn)。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_SPARSE_FILES){

printf("指定的卷支持稀疏文件。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_TRANSACTIONS){

printf("指定的卷支持事務(wù)。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_USN_JOURNAL){

printf("指定的卷支持更新序列號(USN)日志。\n");

}

if (dwFileSystemFlags & FILE_UNICODE_ON_DISK){

printf("指定的卷在文件名中顯示在磁盤上時(shí)支持Unicode。\n");

}

if (dwFileSystemFlags & FILE_VOLUME_IS_COMPRESSED){

printf("指定的卷是一個(gè)壓縮卷。\n");

}

if (dwFileSystemFlags & FILE_VOLUME_QUOTAS){

printf("指定的卷支持磁盤配額。\n");

}

return TRUE;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 效果 和上一個(gè)方法區(qū)別在于如紅框處,驅(qū)動名返回的是以\\?\volume{GUID}形式,并且多出了之前沒有的一個(gè)...
    f675b1a02698閱讀 1,458評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評論 19 139
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,242評論 2 33
  • 昨晚,踩著 2015 年的尾巴,樸樹終于來到深圳「完成」他在這里的個(gè)人演唱會。 之所以說是「完成」,因?yàn)楸M管正式復(fù)...
    書荒菌閱讀 2,437評論 10 37
  • 拍攝地點(diǎn):洛陽洛浦公園 手機(jī)拍攝 圖片版權(quán)歸本人所有,圖片授權(quán)于簡書用于設(shè)置為app開屏圖,一切版權(quán)糾紛與簡書無關(guān)
    yesmydream閱讀 446評論 0 0

友情鏈接更多精彩內(nèi)容