通过C语言获取盘符类型

Posted by zhang on

本来吧,是想通过利用一个锁上的U盾来制作一个系统锁,没想到搞出点这个东西来。有很多不足,没办法。有空,再改。用到了一些WinAPI.所以要包含头文件windows.h. 另外本程序在DEV-C++ 4.9.9.2上测试通过。

文件:获取盘符类型.c

/*这个程序是用来获取各盘符的类型**/
#include
#include
main()
{
long i,j;
UCHAR buf[100];
UCHAR *cdbuf;
j=100;
i=GetLogicalDriveStrings(j,buf);//获取一共有多少个盘符
for (j=0;j{
cdbuf=&buf[j];
if (GetDriveType(cdbuf)==DRIVE_UNKNOWN)                  //其实写成switch^case^break比较好,我比较懒就不改了                     
    printf("%s is 未知驱动器
",cdbuf);
else if (GetDriveType(cdbuf)==DRIVE_NO_ROOT_DIR)
    printf("%s is 路径无效
",cdbuf);
else if (GetDriveType(cdbuf)==DRIVE_REMOVABLE)
    printf("%s is 可移动媒体
",cdbuf);//无法确切区分是U盘还是者软驱
else if (GetDriveType(cdbuf)==DRIVE_FIXED)
    printf("%s is 硬盘
",cdbuf);//无法确切区分硬盘和移动硬盘,当然有时移动硬盘也会被认为是可移动媒体
else if (GetDriveType(cdbuf)==DRIVE_REMOTE)
    printf("%s is 网络驱动器
",cdbuf);
else if (GetDriveType(cdbuf)==DRIVE_CDROM)
    printf("%s is CD-ROM
",cdbuf);//DVD也会出现在这里,另外虚拟光驱也会出现
else if (GetDriveType(cdbuf)==DRIVE_RAMDISK)
    printf("%s is RAM 驱动器
",cdbuf);   
}
while(1);
}
/*
函数GetLogicalDriveStrings
头文件在windows.h
声明如下:
GetLogicalDriveStrings

The GetLogicalDriveStrings function fills a buffer with strings that specify valid drives in the system.

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

很简单的一个函数,msdn有详细的说明

函数GetDriveType
头文件在windows.h
声明如下:
WINBASEAPI
UINT
WINAPI
GetDriveTypeA(
    __in_opt LPCSTR lpRootPathName
    );
WINBASEAPI
UINT
WINAPI
GetDriveTypeW(
    __in_opt LPCWSTR lpRootPathName
    );
#ifdef UNICODE
#define GetDriveType GetDriveTypeW
#else
#define GetDriveType GetDriveTypeA
#endif // !UNICODE
lpRootPathName是目录或盘号的名称。
返回值是目录的属性,有如下值:
DRIVE_UNKNOWN
DRIVE_NO_ROOT_DIR
DRIVE_REMOVABLE
DRIVE_FIXED
DRIVE_REMOTE
DRIVE_CDROM
DRIVE_RAMDISK
*/

#About Me

张小璋,野蛮生长成世界500强企业供应链金融产品经理的法语毕业生。微信公众号:张小璋碎碎念(ID: SylvainZhang )。
一直在互联网金融公司从事产品经理工作并负责互联网金融产品线,深耕互联网金融和区块链领域。「PMCAFF」、「人人都是产品经理」专栏作家、「PmTalk」签约作家。