在处理文件属性上遇到问题,等待高人点拨:
CFileStatus rstatus;
CFile::GetStatus(str,rstatus);//获得文件属性,str文件路径含名字
rstatus.m_attribute=rstatus.m_attribute & 0X3E;//如果时只读,则改为普通
CFile::SetStatus(str,rstatus);//重新设置文件属性。
正常情况下(自己建一些文件),处理是没问题的。但是在处理一些文件(这些文件是运行qq后产生的,)时,到CFile::GetStatus(str,rstatus);就出错了,程序跳出,也没有捕获到CFileException。 
那些诡异的文件是C:\...\Local Settings\Temp\qq号码\..下的文件。

解决方案 »

  1.   

    判断了。只是在处理其他文件时都是OK的,就是那几个qq登陆后运行后的几个文件搞不定。
    if (PathFileExists(str))
    {
    TRY
    {
    CFileStatus rstatus;
    CFile::GetStatus(str,rstatus);
    rstatus.m_attribute=rstatus.m_attribute & 0X3E;
    CFile::SetStatus(str,rstatus);
    }
    CATCH (CFileException, e)
    {
    CString str2;
    str2.Format("%d",e->m_cause);
    MessageBox(str2);
    }
    END_CATCH
    }
      

  2.   

    CATCH (CFileExceptione)
    {
    CString str2;
    str2.Format("%d",e->m_cause);
    MessageBox(str2);
      

  3.   

    try{}catch(CFileException e){}
    TRY{}CATCH(CFileException,e){}END_CATCH
      

  4.   

    我用下面的方法对那些出问题的文件改属性就没问题:
    HANDLE handle;
    WIN32_FIND_DATA find_data;
    handle = :: FindFirstFile("F:\\bg.png",&find_data);
    FindClose(handle);
    find_data.dwFileAttributes = find_data.dwFileAttributes&~FILE_ATTRIBUTE_READONLY;
    ::SetFileAttributes("F:\\bg.png",find_data.dwFileAttributes);
    不懂为什么没会这个样子,难道CFile::GetStatus在使用上还有很多限制,在msdn中好像没查到有什么特殊的地方么。不懂有没有人能解释一下,探讨探讨
      

  5.   

    补充一下: 我之前用的CFile::GetStatus 方法和后来FindFirstFile处理的时同一个文件,我是从C:\Documents and Settings\..\local settings\temp\qq号码\..中考出的文件