用win32 API判断是否能够读取某分区的内容

发布于 2022-08-28 11:10:22 字数 88 浏览 11 评论 0

某分区即使分配了盘符也可能无法打开/读取(比如插入一个没有卡的读卡器)

除了试着读取,判断返回值之类的方法外,我想知道如何判断此分区是否可读。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

纵情客 2022-09-04 11:10:22
bool IsAccessible(TCHAR *pstr)
{
   TCHAR str[260];
   _tcscpy(str,pstr);
   if(str[_tcslen(str)-1]!='\\')
       _tcscat(str,_T("\\*"));
   else
        _tcscat(str,_T("*"));
   WIN32_FIND_DATA FindFileData;
   HANDLE hFind;   
    hFind = FindFirstFile(pstr, &FindFileData);
   if (hFind == INVALID_HANDLE_VALUE || GetLastError()==ERROR_FILE_NOT_FOUND) 
   {
      //printf ("driver is unable to access!");
      return false;
   }
   CloseHandle(hFind);
    return true;
} 

很简单你访问一次之后看访问是否成功即可。


感谢楼主,上面的方法不是很成功,原因是在读取磁盘根目录的时候,FindFirstFile是不会返回"."和"..",而是直接返回INVALID_HANDLE_VALUE。
下面的代码是通过访问磁盘来获取磁盘的大小,这个函数调用失败后表面不存在磁盘。

bool isAccess(TCHAR *pstr)
{
    ULARGE_INTEGER nFreeBytesAvailable;
        ULARGE_INTEGER nTotalNumberOfBytes;
        ULARGE_INTEGER nTotalNumberOfFreeBytes;
        //
        if (GetDiskFreeSpaceEx(pstr,
              &nFreeBytesAvailable,
              &nTotalNumberOfBytes,
              &nTotalNumberOfFreeBytes))
        {
            return true;     
       }
    return false;
}

实验使用光驱来做实验,实验表明这种方法可行,不过在光驱里没有盘片的时候,会弹出如下的对话框:
光盘访问失败对话框

这个问题的解决还没有想好。可以用FindWindow然后杀掉。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文