一个文件异常(CFileException)的问题,在线等待!

my9471 2003-11-27 12:39:01
try
{
CFile::Remove(filename);
}
catch (CFileException& Exception)
{
switch(Exception.m_cause)
{
case CFileException::accessDenied:
TRACE("Access denied!\n");
return FALSE;
default:
TRACE("Remove default Exception!\n");
return FALSE;
}
}

我在一个程序要删除另一个程序正在读的文件, 用上面的方法捕获异常, 为什么总是捕获不到, 删除文件是程序抛出 Abnormal program exception, 的C++ runtime error提示, 在TRACE中能看到windows给出的accessDenied异常, 但我的程序总是捕获不到,为什么?
...全文
1280 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
my9471 2003-12-13
  • 打赏
  • 举报
回复
多谢各位,问题解决, 我是在一个通用类中做删除工作,因此不能捕获,在Cdialog类中就可以了,真搞不明白这是为什么, MSDN中CFileException的说明中没说这点啊,哪位老兄给指点一下
my9471 2003-12-05
  • 打赏
  • 举报
回复
bluebohe(薄荷):
真的不行啊, 进程中删除一个其它进程正在读的文件,这时候能捕获CFileException::sharingViolation异常, 但我的删除过程是在一线程中进行,这时真的不能捕获此异常, 程序弹出abnormal program exception 错误, 请问, 线程中的异常处理和进程中不一样吗?
bluebohe 2003-12-04
  • 打赏
  • 举报
回复
& Exception改成* Exception就好了啊




MSDN的这个例子你试过了吗?
char* pFileName = "test.dat";
TRY
{
CFile::Remove( pFileName );
}
CATCH( CFileException, e )
{
#ifdef _DEBUG
afxDump << "File " << pFileName << " cannot be removed\n";
#endif
}
END_CATCH
my9471 2003-12-04
  • 打赏
  • 举报
回复
没有人知道吗?
我再次单独作了验证, 进程中删除一个其它进程正在读的文件,这时候能捕获CFileException::sharingViolation异常, 但我的删除过程是在一线程中进行,这时真的不能捕获此异常, 请问, 线程中的异常处理和进程中不一样吗?
vcforever 2003-11-27
  • 打赏
  • 举报
回复
try
{
CFile::Remove(filename);
}
catch (CFileException& Exception)
{
switch(Exception.m_cause)
{
case CFileException::accessDenied:
TRACE("Access denied!\n");
return FALSE;
case CFileException::badPath:
TRACE("bad path\");
return false
case CFileException::diskFull:
TRACE(disk full!\n);
return false;
case CFileException::fileNotFound:
TRACE("file not found!\n");
return false;
case CFileException::hardIo:
TRACE("hardware error!\n");
return false;
case CFileException::lockViolation:
TRACE("lock violation!\n");
return false;
case CFileException::sharingViolation:
TRACE("share violation!\n");
return false;
case CFileException::tooManyOpenFiles:
TRACE("too many file open");
return false;
default:
TRACE("Remove default Exception!\n");
return FALSE;
}
}
bluebohe 2003-11-27
  • 打赏
  • 举报
回复
CFileException& Exception
CFileException* e
my9471 2003-11-27
  • 打赏
  • 举报
回复
bluebohe(薄荷) :
你上面这段代码和我给出的没什么不一样啊,你怎么行,难道就因你要删除的文件是EXE吗?
bluebohe 2003-11-27
  • 打赏
  • 举报
回复
我试过他们的,确实不行
不过我现在的行:)
bluebohe 2003-11-27
  • 打赏
  • 举报
回复

void CDelFileDlg::OnButton1()
{
// TODO: Add your control notification handler code here
try
{
CFile::Remove("E:\\Program Files\\UltraEdit\\UEDIT32.EXE");
}
catch(CFileException* e)
{
switch(e->m_cause)
{
case CFileException::accessDenied:
TRACE("Access denied!\n");
return ;
default:
TRACE("Remove default Exception!\n");
return ;
}
}
}
my9471 2003-11-27
  • 打赏
  • 举报
回复
TRY/CATCH宏也一样,
my9471 2003-11-27
  • 打赏
  • 举报
回复
各位试试看,真的不行,你通过网络邻居去打开一个文件,在另一台机子上用程序删除它,你看能不能捕获这个异常
arvid_gs 2003-11-27
  • 打赏
  • 举报
回复
可以呀!
try
{
CFile::Remove(filename);
}
catch (CFileException& Exception)
{
switch(Exception.m_cause)
{
case CFileException::accessDenied:
TRACE("Access denied!\n");
return FALSE;
default:
TRACE("Remove default Exception!\n");
return FALSE;
}
}
keiven 2003-11-27
  • 打赏
  • 举报
回复
up
cchuocp 2003-11-27
  • 打赏
  • 举报
回复
试一下TRY/CATCH宏。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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