请教C++中GetDriveType() API函数的一个问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 04:31:52
我写了段代码,作用是获取磁盘所有分区后再把光驱盘符去除(用"\0"代替),把结果放在数组allfenqu[] 中,数组中每个元素代表一个分区盘符,不包括 :\\ 这样的路径,allfenqu[]数组开始时存放的是所有盘符。

当我用这样的代码测试结果是正确的,光驱盘符会被去掉:
CString root; //root代表盘符路径
for(i=0;i<20;i++) //0-20代表最大的盘符数
{
root.Format("%c:\\",allfenqu[i]);
if(GetDriveType(root)==5)
allfenqu[i]='\0';
}

但我用这样的代码时结果却无法去掉光驱盘符,allfenqu[]中还是会包含光驱盘符:
CString root;
for(i=0;i<20;i++)
{
root=allfenqu[i]+":\\";
if(GetDriveType(root)==5)
allfenqu[i]='\0';
}

请问这是为什么呢??

谢谢大家···

GetDriveType()中的参数是一个TCHAR的指针类型(既支持ASC又支持Unicode的一种类型), 所以传给它的参数必须是这个类型的.
我用char*作为参数传进去, 在GetDriveType中用强制转换都无法正确输出Drive的类型, 更不用说用CString了
经过测试下来发现, 如果GetDriveType中传的参数不是TCHAR类型, 获得的值都是DRIVE_NO_ROOT_DIR(为什么这样我也不知道, windows内核的源代码又是不公开的-_-!), 所以你这边用if(GetDriveType(root)==5)不会转到if语句内.
下面是test codes, 可以正常运行, 正常显示, 你自己根据需要更改下吧
#include <stdio.h>
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{

char a[] = ("ABCDEFGH");

for (int i = 0; i < 8; ++i)
{
TCHAR root[100];
swprintf(root, TEXT("%c:\\"), a[i]);
wprintf(TEXT("now root is %s\n"), root);
unsigned int ab = GetDriveType(root);

if(ab == DRIVE_CDROM)
{
wprintf(TEXT("%s is CDROM\n"), root);
}
else if(ab == DRIVE_UNKNOWN)
{
wprintf(TEXT("%s is unknown\n"), root);
}
else