请教C++中GetDriveType() API函数的一个问题
来源:百度知道 编辑:UC知道 时间:2024/06/09 04:31:52
当我用这样的代码测试结果是正确的,光驱盘符会被去掉:
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