c++ - 卡在 api getdrivetype

标签 c++ windows visual-c++

我有点受困于此 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/

相关文章:

c++ - 参数化特征 C++

c++ - push_back(*obj) 正在调用析构函数并导致 SDL_BlitSurface 崩溃

java - 如何通过java代码将ASCII码转换成主机二进制码?

java - 在 Windows 中查看 tomcat 日志文件

windows - 更新 opengl 版本以使用 gephi

c# - 如何解决 Windows Certificate app Supported "API test"test result fail

c++ - USB 驱动器 WriteFile 到卷外的扇区

c++ - C++ 程序中的异常编译器错误。与语法无关。 Windows编程

visual-studio-2008 - "dynamic"中的 "dynamic atexit destructor"是什么意思?

windows - 如何使用 DvbSiparser.h 在 vc++ 中解析 mpeg2 TS?