列举主机磁盘时出错

dclchj 2009-09-09 11:25:47
我用同一个函数 _chdrive ,在一个程序里能正常执行,在另一个程序里会弹出错误框:
“Windows 驱动器未就绪”
“Exception Processing Message c00000a3 Parameters 764ebf7c 764ebf7c”
点取消后能正常列举出磁盘

不知道是什么原因,正常运行的程序的的代码如下:

int drive;
CString disk[26],diskinfo;
CString scrxy;

//通过转换当前盘的方式测试磁盘
for(drive = 1;drive<=26;drive++)
if(!_chdrive(drive))
{
disk[drive].Format("%c:",drive+'A'-1);
diskinfo = diskinfo+disk[drive];
}
m_diskvol.SetWindowText(diskinfo);

会弹出错误框但能得到最终结果的程序的代码如下:

for(drive = 1;drive<=26;drive++)
if(!_chdrive(drive))
{
int n = WSAGetLastError(); //这里提示错误3,找不到指定的路径(好像不是问题所在)
sprintf(dsk,"%c:",drive+'A'-1);
strcat(p,dsk);
strcat(p+3,"DRIVE_FIXED");
p += 15;
m_DataStruct.num++;
}
...全文
272 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
nothize 2009-09-11
  • 打赏
  • 举报
回复
是緩衝區溢位導致的副作用嗎?
dclchj 2009-09-11
  • 打赏
  • 举报
回复
谢谢大家,这个问题没有解决,我先放一放。结贴。
见习学术士 2009-09-10
  • 打赏
  • 举报
回复
GetDriveType

GetDiskFreeSpaceEx
dclchj 2009-09-10
  • 打赏
  • 举报
回复
不好意思打错了,是 _chdrive(1)
仅仅是判断有几个盘符,没有对磁盘做别的操作。
dclchj 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tr0j4n 的回复:]
》?????LZ想知道什么啊?
[/Quote]
程序运行 _chdriver(1) 时弹出对话框,
“Windows 驱动器未就绪”
“Exception Processing Message c00000a3 Parameters 764ebf7c 764ebf7c”

点取消后继续执行。
而当其中参数改成2-26任意数就不会弹出对话框。
不知道是什么原因。
MoXiaoRab 2009-09-10
  • 打赏
  • 举报
回复
》?????LZ想知道什么啊?
oyljerry 2009-09-10
  • 打赏
  • 举报
回复
如果捕获到错误了,就continue; 跳到下一个循环..
dclchj 2009-09-10
  • 打赏
  • 举报
回复
GetDriveType() 用这个试试看。
这个同样能列出磁盘,而且不会弹出错误框。只是还是不知道弹框的原因。

从代码上来讲你的程序不可能出现那种问题的.(不应该用WSAGetLastError,而是直接用GetLastError)

你只是改变当前磁盘,只有当对磁盘操作时,且目标磁盘不存在时,才会出现那样的情况.
你是否后面的代码有操作磁盘啊.
后面没有操作磁盘,经检查出错就在drive = 1时调用 _chdrive(drive) 这一句,当选取消,框退出后drive = 2 一切正常执行。

msdn上面说的很清楚了:
If drive does not specify a valid drive, the invalid parameter handler is invoked, as described in Parameter Validation. If execution is allowed to continue, the function returns -1 and errno is set to EACCES, and _doserrno is set to ERROR_INVALID_DRIVE.
你从1到26中有很多盘是没有的,改变条件看看:if(_chdrive(drive) != -1),必要时,去掉WSAGetLastError函数,除非,你想得到出错信息.
drive = 1时依旧弹出错误框。

两个一个转到根目录和转到其他目录可能会有不同.....
这问题,下次遇到再说吧。

如果今天没有得到最佳答案就结贴算了。
dirdirdir3 2009-09-10
  • 打赏
  • 举报
回复
两个一个转到根目录和转到其他目录可能会有不同.....
youyifang 2009-09-10
  • 打赏
  • 举报
回复
msdn上面说的很清楚了:
If drive does not specify a valid drive, the invalid parameter handler is invoked, as described in Parameter Validation. If execution is allowed to continue, the function returns -1 and errno is set to EACCES, and _doserrno is set to ERROR_INVALID_DRIVE.
你从1到26中有很多盘是没有的,改变条件看看:if(_chdrive(drive) != -1),必要时,去掉WSAGetLastError函数,除非,你想得到出错信息.
贪玩的老鼠 2009-09-10
  • 打赏
  • 举报
回复
从代码上来讲你的程序不可能出现那种问题的.(不应该用WSAGetLastError,而是直接用GetLastError)

你只是改变当前磁盘,只有当对磁盘操作时,且目标磁盘不存在时,才会出现那样的情况.
你是否后面的代码有操作磁盘啊.
dclchj 2009-09-10
  • 打赏
  • 举报
回复
问题出在第一次循环 drive = 1的时候,改成 drive = 2运行顺利。

我的电脑中 A:对应 3.5寸软盘

但问题是第一个代码怎么就不弹出提示框。
threenewbee 2009-09-10
  • 打赏
  • 举报
回复
GetDriveType() 用这个试试看。

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧