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然后杀掉。
很简单你访问一次之后看访问是否成功即可。
感谢楼主,上面的方法不是很成功,原因是在读取磁盘根目录的时候,FindFirstFile是不会返回"."和"..",而是直接返回INVALID_HANDLE_VALUE。
下面的代码是通过访问磁盘来获取磁盘的大小,这个函数调用失败后表面不存在磁盘。
实验使用光驱来做实验,实验表明这种方法可行,不过在光驱里没有盘片的时候,会弹出如下的对话框:

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