Windows API一日一练(61)GetDriveType函数

Post date: 2012/3/27 上午 07:38:27

分类: Direct3D2007-10-30 20:31 5115人阅读 评论(2) 收藏 举报

经常碰到这样的需求,比如你需要保存一个文件到一个目录里去,这个目录或许是用户指定的目录,那么你就需要确保这个目录是否有效的,这样就需要去测试这个目录是否允许写文件?这个目录是否存在?这个目录是否可写的?或者这个目录是否网络上的目录?要完成这个任务,就得使用函数GetDriveType来完成。GetDriveType函数可以获取目录和盘号的属性。

函数GetDriveType声明如下:

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

调用函数的例子如下:

#001 //获取目录或磁盘的属性。

#002 //蔡军生 2007/10/30 QQ:9073204 深圳

#003 void Disk(void)

#004 {

#005 //获取C:目录的属性。

#006 std::wstring strTest(_T("C://WINDOWS//"));

#007 UINT nRes = ::GetDriveType(strTest.c_str());

#008 switch(nRes)

#009 {

#010 case DRIVE_UNKNOWN:

#011 OutputDebugString(_T("DRIVE_UNKNOWN/r/n"));

#012 break;

#013 case DRIVE_NO_ROOT_DIR:

#014 OutputDebugString(_T("DRIVE_NO_ROOT_DIR/r/n"));

#015 break;

#016 case DRIVE_REMOVABLE:

#017 OutputDebugString(_T("DRIVE_REMOVABLE/r/n"));

#018 break;

#019 case DRIVE_FIXED:

#020 OutputDebugString(_T("DRIVE_FIXED/r/n"));

#021 break;

#022 case DRIVE_REMOTE:

#023 OutputDebugString(_T("DRIVE_REMOTE/r/n"));

#024 break;

#025 case DRIVE_CDROM:

#026 OutputDebugString(_T("DRIVE_CDROM/r/n"));

#027 break;

#028 case DRIVE_RAMDISK:

#029 OutputDebugString(_T("DRIVE_RAMDISK/r/n"));

#030 break;

#031 default:

#032 break;

#033 }

#034

#035 //判断盘号是否光驱。

#036 strTest = _T("d://");

#037 nRes = ::GetDriveType(strTest.c_str());

#038 switch(nRes)

#039 {

#040 case DRIVE_UNKNOWN:

#041 OutputDebugString(_T("DRIVE_UNKNOWN/r/n"));

#042 break;

#043 case DRIVE_NO_ROOT_DIR:

#044 OutputDebugString(_T("DRIVE_NO_ROOT_DIR/r/n"));

#045 break;

#046 case DRIVE_REMOVABLE:

#047 OutputDebugString(_T("DRIVE_REMOVABLE/r/n"));

#048 break;

#049 case DRIVE_FIXED:

#050 OutputDebugString(_T("DRIVE_FIXED/r/n"));

#051 break;

#052 case DRIVE_REMOTE:

#053 OutputDebugString(_T("DRIVE_REMOTE/r/n"));

#054 break;

#055 case DRIVE_CDROM:

#056 OutputDebugString(_T("DRIVE_CDROM/r/n"));

#057 break;

#058 case DRIVE_RAMDISK:

#059 OutputDebugString(_T("DRIVE_RAMDISK/r/n"));

#060 break;

#061 default:

#062 break;

#063 }

#064 }