硬盘被拔出了,如何让ReadFile WriteFile快速返回报错

zsj_vchelp 2007-01-09 09:22:48
有台服务器上有几个硬盘在不停的进行文件读写(ReadFile WriteFile函数) 现在从中拔掉一个硬盘后,读写到这个硬盘时候后ReadFile WriteFile有时候要花7,8秒才能返回FALSE。有没有什么办法快速的返回FALSE,或则有什么更好的API可以让我在读写前先判断下(最好耗时越少越好那种 几十号秒内的) 谢谢大家了哈
...全文
349 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
我也想知道,正在找這方面的資料~~~~~
chmdcr 2007-11-26
  • 打赏
  • 举报
回复
恩 学习
jameshooo 2007-11-26
  • 打赏
  • 举报
回复
ReadFile是一个通用的读取设备内容的API,它有很多可选项,在你的这种情况下应该使用重叠IO模式来读取,在OVERLAPPED结构里传递一个自定义的事件句柄并记录下来,在服务控制回调函数里如果发现设备已卸载,则手工设置这个事件为信号状态,这样你的ReadFile会马上返回,返回后判断是否属于设备卸载引起的
jameshooo 2007-11-26
  • 打赏
  • 举报
回复
你的程序是服务程序吗?如果是,这样尝试:

1、在服务初始化时调用 RegisterDeviceNotification 登记设备通知;

2、在服务退出清理时调用 UnregisterDeviceNotification 取消设备通知;

3、在服务的控制回调函数里处理设备通知事件:

DWORD ServiceCtrlEx( DWORD dwCtrlCode, DWORD dwEventType,LPVOID lpEventData,LPVOID lpContext)
{
PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lpEventData;
if (dwCtrlCode==SERVICE_CONTROL_DEVICEEVENT)
{
switch(dwEventType)
{
case DBT_DEVICEARRIVAL: // 设备已启用
// 你的代码
break;
case DBT_DEVICEREMOVECOMPLETE: // 设备已卸载
// 你的代码
break;
}
}
return NO_ERROR;
}
ryrx 2007-11-26
  • 打赏
  • 举报
回复
那如何测试硬盘连接是否断开呢?
ryrx 2007-11-26
  • 打赏
  • 举报
回复
我的程序是一个直接读取USB外置硬盘扇区数据的程序.
当外置硬盘通过usb界面连接到电脑上时,就启动该程序进行扇区数据的读取,并通过一定的算法播放出内容来.
问题就发生在,我读取用的API是readfile()这个函数,并对其有个判断,如果返回非0值就说明出问题了(比如硬盘坏了,或被拔了).
但是在实际的测试中,如果在这个判断里加个调试断点的话,读取过程中拔掉硬盘,有时候要等大约10秒左右,才会停在断点上.有时候又一拔就停在断点上,反应时快时慢.
我想,既然会停在断点上,就说明错误反馈一定是这个readfile()函数产生的,但是为什么反应的时间会时快时慢呢?
smartdrvsky 2007-11-24
  • 打赏
  • 举报
回复
写入数据之前检测,如果硬盘断开接连,提示.
具体方法我不知道,我是来混分的.
祝楼主好运.
zswolf2000 2007-11-23
  • 打赏
  • 举报
回复
关注
dirdirdir3 2007-11-23
  • 打赏
  • 举报
回复
这个可能用api解决不了的,要看底层驱动是怎么实现的
Torch009 2007-11-23
  • 打赏
  • 举报
回复
不行就加个SetTimer,不停的检测。
stivenjia 2007-11-23
  • 打赏
  • 举报
回复
mark!!学习
ryrx 2007-11-22
  • 打赏
  • 举报
回复
今天遇到同楼主一样的问题,求解!
alphapiao 2007-01-09
  • 打赏
  • 举报
回复
你在createfile的时候试试使用
FILE_SHARE_WRITE, NULL,OPEN_EXISTING,
FILE_FLAG_NO_BUFFERING|
FILE_FLAG_WRITE_THROUGH,
NULL);
zsj_vchelp 2007-01-09
  • 打赏
  • 举报
回复
试了 不行啊 忘了说了 我是直接进行扇区读写的阿

2,640

社区成员

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

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