一個遍歷驅動器的c程式碼

weixin_34319999發表於2017-11-14
最近看到Windows程式設計的獲取驅動器資訊的一些東西,就熟練下相關的API呼叫,增強對c的熟練程度,具體程式碼如下:
 
 
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

#define BUFSIZE 1024

 BOOL GetDirverInfo(LPSTR szDriver);

void main()
{
    CHAR szLogicalDriverStrings[BUFSIZE] = {0};
    PCHAR szDriver = NULL;
    ZeroMemory(szLogicalDriverStrings,BUFSIZE);
    GetLogicalDriveStrings( (BUFSIZE - 1),szLogicalDriverStrings);
    szDriver = (PCHAR) szLogicalDriverStrings;
    do 
    {
        if ( ! GetDirverInfo(szDriver) )
        {
            printf("\n得到卷資訊錯誤:%d",GetLastError() );
        }
        szDriver += ( lstrlen(szDriver) + 1 );
    } while (*szDriver != '\x00');

    getchar();
}

BOOL GetDirverInfo(LPSTR szDriver)
{
    UINT nDriverType;
    CHAR szDriverName[MAX_PATH];
    DWORD nVolumeSerialNumber;
    DWORD nMaximumComponentLength;
    DWORD nFileSystemFlags;
    CHAR szFileSystemNameBuffer[MAX_PATH];
    nDriverType = GetDriveType(szDriver);
    switch (nDriverType)
    {
    case DRIVE_UNKNOWN:
        printf("%s","未知的驅動器");
        break;
    case DRIVE_NO_ROOT_DIR:
        printf("%s","根路徑無效驅動器");
        break;
    case DRIVE_REMOVABLE:
            printf ("%s","可插拔的驅動器");
            break;
    case DRIVE_CDROM:
                printf("%s","光碟機驅動");
                break;
    case DRIVE_RAMDISK:
                printf("%s","硬碟驅動");
                break;
    default:
        printf("%s","其他型別");
    }

        
    if ( !GetVolumeInformation(
        szDriver,
        szDriverName,
        MAX_PATH,
        &nVolumeSerialNumber,
        &nMaximumComponentLength,
        &nFileSystemFlags,
        szFileSystemNameBuffer,
        BUFSIZE
        ) )
    {
        
     goto EXIT0;
        
    }
    if ( 0 != lstrlen(szDriverName) )
    {
        printf("\n驅動器名字 是 %s\n",szDriverName);
    }
    printf("\n 卷的序列號是 %u\n",nVolumeSerialNumber);
    printf("\n 最大元件長度是 %u\n",nMaximumComponentLength);
    printf("\n 檔案系統型別是 %s\n",szFileSystemNameBuffer);

   return true;
EXIT0:

   return false;
}


本文轉自wiliiwin 51CTO部落格,原文連結:http://blog.51cto.com/wiliiwin/241904

相關文章