码迷,mamicode.com
首页 > Windows程序 > 详细

Windows API一日一练 61 GetDriveType函数

时间:2019-02-01 19:41:23      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:cst   网络   windows   switch   ifd   nba   str   名称   win   

经常碰到这样的需求,比如你需要保存一个文件到一个目录里去,这个目录或许是用户指定的目录,那么你就需要确保这个目录是否有效的,这样就需要去测试这个目录是否允许写文件?这个目录是否存在?这个目录是否可写的?或者这个目录是否网络上的目录?要完成这个任务,就得使用函数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  }
 

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

Windows API一日一练 61 GetDriveType函数

标签:cst   网络   windows   switch   ifd   nba   str   名称   win   

原文地址:https://www.cnblogs.com/skiwnchh/p/10346701.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!