我有点受困于此 API GetDriveType()
。每次此 api 返回我 DRIVE_NO_ROOT_DIR
时,我都会传递类似“c:\”等的驱动器号。即使对于我的主驱动器“c:\”,api 也会返回相同的内容。
在此之前我调用了 GetLogicalDrives()
进行检索。
操作系统:WinXP sp3,NTFS文件系统
代码:编译器VS2005
int main() {
bool folder;
String * filename;
char individualdrive[4],alldrives[100];
memset(alldrives,0,100);
GetLogicalDriveStringsA(100,alldrives);
for(int i=0;(i<100)&&(alldrives[i]);i+=4) {
memset(individualdrive,0,4);
strncpy(individualdrive,alldrives+i,4); //extracting individual drive strings.
if(DRIVE_FIXED == GetDriveTypeW((LPCWSTR)individualdrive))
getfile((System::String*)individualdrive, filename,folder); }
return 0; }
最佳答案
如果没有代码,我们就只能猜测。我的猜测是:
- 您未能将
\
转义为"C:\\"
。 - 您正在将 ANSI 字符串传递给 API 的 Unicode 版本,反之亦然。
除非是这种性质的编码错误,否则很难看出 API 会如何失败。
将代码添加到您的问题后,现在很清楚这些要点中的第二个是解释。您正在将 ANSI 字符串数据传递给 Unicode API,这当然会失败。
要解决此问题,最好将所有代码切换为使用 Unicode 字符串。
除了 Unicode/ANSI 问题之外,我认为缓冲区处理代码也值得怀疑。我不知道你为什么假设一个驱动器有 4 个字符。我认为 GetLogicalDriveStrings 有可能返回未映射的驱动器。
关于c++ - 卡在 api getdrivetype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5831320/