首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >坚持使用api getdrivetype

坚持使用api getdrivetype
EN

Stack Overflow用户
提问于 2011-04-29 19:18:47
回答 2查看 4K关注 0票数 0

我有点被这个GetDriveType()接口卡住了。每次这个api返回DRIVE_NO_ROOT_DIR时,我都会像这样传递驱动器号"c:\“等。即使对于我的主驱动器"c:\”,api也会返回相同的东西。

在此之前,我已经调用了GetLogicalDrives()进行检索。

操作系统: WinXP sp3,NTFS文件系统

代码:编译器VS2005

代码语言:javascript
复制
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; }
EN

回答 2

Stack Overflow用户

发布于 2011-04-29 19:30:01

没有代码,我们只能猜测。我的猜测是:

"C:\\".

  • You将ANSI字符串传递到版本的
  • 时,您无法转义\,反之亦然。

除非是这种性质的编码错误,否则很难看出API怎么会失败。

在您的问题中添加了代码后,现在很明显,这些要点中的第二个是解释。您正在将ANSI字符串数据传递给Unicode API,这当然会失败。

要解决此问题,最好将所有代码切换为使用Unicode字符串。

除了Unicode/ANSI问题之外,我认为缓冲区处理代码也是可疑的。我不知道你为什么要假设一个驱动器是4个字符。我认为GetLogicalDriveStrings有可能返回未映射的驱动器。

票数 3
EN

Stack Overflow用户

发布于 2011-04-29 19:31:34

您应该传递驱动器的根目录,因此应该是:

代码语言:javascript
复制
GetDriveType( "C:\\" );

注意双反斜杠-在C和C++字符串文字中,反斜杠是一个特殊的“转义”字符,它本身必须转义。

下面的代码为我返回3,这意味着固定驱动器:

代码语言:javascript
复制
#include <iostream>
#include <windows.h>
using namespace std;

int main() {
    cout << GetDriveType( "C:\\" ) << endl;
}

以下代码列出了我的系统上的所有驱动器,以及其类型的数值:

代码语言:javascript
复制
#include <windows.h>
#include <iostream>
using namespace std;

int main() {
    const int BUFSIZE = 100;
    char buffer[ BUFSIZE ];
    DWORD n = GetLogicalDriveStrings( BUFSIZE, buffer );
    DWORD i =  0;
    while( i < n )   {
        int t = GetDriveType( &buffer[i] );
        cout << &buffer[i] << " type is " << t << endl;
        i += strlen( &buffer[i] ) + 1 ;
    }
}

制作:

代码语言:javascript
复制
C:\ type is 3
D:\ type is 5
E:\ type is 5
F:\ type is 2
Q:\ type is 3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5831320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档