首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CFile将如何处理不良扇区?

CFile将如何处理不良扇区?
EN

Stack Overflow用户
提问于 2016-02-28 10:33:48
回答 2查看 116关注 0票数 0

我写了一个可视化的C++程序,它将通过CFile读取文件。然而,该程序的一位用户告诉我,当他使用该程序读取硬盘上有坏扇区的文件时,程序将会死锁。

因为很难在我自己的环境中模拟一个坏扇区,所以我想知道CFile在处理坏扇区时会做什么?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-02-28 12:19:37

这是一个文件系统/磁盘驱动程序级别的问题。CFile本身可能完全没有处理坏扇区的逻辑。它将(可能)进行系统调用,用从文件句柄读取的数据填充固定的缓冲区。

如果坏数据导致您的程序死锁,您可能应该添加完整性检查。例如,校验和或散列?如果您检测到损坏的数据,则可以通知用户并中止。

否则,唯一合理的解决方案是让用户获得新的磁盘驱动器。

票数 0
EN

Stack Overflow用户

发布于 2016-02-28 13:45:41

CFile执行读取时,它归结为以下代码:

代码语言:javascript
复制
if (!::ReadFile(m_hFile, lpBuf, nCount, &dwRead, NULL))
    CFileException::ThrowOsError((LONG)::GetLastError(), m_strFileName);

基本上,它只是一个Win32 ReadFile()调用,如果它不成功,就会抛出一个异常。

所以我希望在这种情况下会抛出一个异常--也许你的代码中的某些东西正在捕获、吞噬和忽略该异常?您可以尝试在执行读取操作时捕获异常,并打印一条消息,然后终止程序。至少你的程序不会“死锁”。

另一方面,“死锁”可能是Windows或其他系统组件(防病毒?)在从ReadFile()调用返回之前,挂起或花费很长很长的时间来确定是否存在错误。如果您的用户正在尝试读取磁盘上的坏扇区,我不确定需要多大的努力才能使您的程序“工作”。这就像是试图开车过一座被冲垮的桥,然后抱怨你的车掉进了河里。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35678037

复制
相关文章

相似问题

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