我用DeleteFile函数删除一个文件,不过这个文件是只读的,这样就删不了。有什么函数或方法可以强制删除一个只读文件呀?哪位能帮帮我?

解决方案 »

  1.   

    // send all temp files to the recycle bin
    char *File = "C:\\windows\\temp\\*.TMP\0";
    SHFILEOPSTRUCT op;
    ZeroMemory(&op, sizeof(op));
    op.hwnd  = Handle;
    op.wFunc = FO_DELETE;
    op.pFrom = File;
    op.fFlags= FOF_ALLOWUNDO;
    SHFileOperation( &op);
      

  2.   

    可以先设置一下文件属性啊。
    BOOL SetFileAttributes(
      LPCTSTR lpFileName,      // file name
      DWORD dwFileAttributes   // attributes
    );设置为FILE_ATTRIBUTE_ARCHIVE 就可以删除了,当然如果设置失败就不能删除。
      

  3.   

    先去掉只读属性,在删除该文件
    DWORD fileAttributes = GetFileAttributes(sDelfile);
    fileAttributes &= ~FILE_ATTRIBUTE_READONLY;
    SetFileAttributes(sDelfile, fileAttributes);
    ::DeleteFile(sDelfile);
      

  4.   

    SetFileAttributes(pFileName,FILE_ATTRIBUTE_NORMAL)
    DeleteFile();
      

  5.   

    那有这么复杂呀
    DeleteFile 方法
    描述删除一个指定的文件。语法object.DeleteFile filespec[, force]DeleteFile 方法语法有如下几部分:部分 描述 
    object 必需的。始终是一个 FileSystemObject 的名字。 
    filespec 必需的。要删除文件的名字。Filespec 可以在最后的路径部件中包含通配符。 
    force 可选的。Boolean 值,如果要删除具有只读属性设置的文件,其值为 True。如果其值为 False (缺省),则不能删除具有只读属性设置的文件。 
      

  6.   

    TO:spark_li(晕忽忽(恶人谷:通讯连长)) 你说的函数是VBScript下的吧?
      

  7.   

    VB中也可以用VBScript啊,例程如下,经过测试了的哦:)Private Sub Form_Click()
        DeleteAFile "d:\tmp\try.file"
    End Sub
    Sub DeleteAFile(filespec)
      Dim fso
      Set fso = CreateObject("Scripting.FileSystemObject")
      fso.DeleteFile (filespec), True
    End Sub
    PS:
       看到这个帖子的朋友帮忙哦
    请关注http://www.ycjmw.com/window/test.asp
    帮14、17号作品投一票吧,谢谢。
      

  8.   

    To spark_li(晕忽忽(恶人谷:通讯连长)) :兄弟,这是在 VC/MFC 基础类板块呀!
      

  9.   

    再To spark_li(晕忽忽(恶人谷:通讯连长)) :
    你贴的那是什么网址呀,什么的投票呀???
      

  10.   

    bsk(bsk):其实vb 的这些函数经过了包装的,也就是去掉只读属性,然后删除的过程,
    完全可以模拟他写个一样的函数出来. :)
      

  11.   

    nod,在VC/MFC中就比在vb中更简单了,艾。
      

  12.   

    CString str = "d:\\aaa.txt";
    CFileStatus filestatue; CFile::GetStatus(str,filestatue);
    if(filestatue.m_attribute == 0x01 || filestatue.m_attribute == 0x03 ||filestatue.m_attribute == 0x21 ||filestatue.m_attribute == 0x23)
    {
    filestatue.m_attribute = 0x00;
    CFile::SetStatus(str,filestatue);
    }
    CFile::Remove((LPCTSTR)str);
      

  13.   

    看来还是用SetFileAttributes+DeleteFile最简单了…………
      

  14.   

    不允许FOF_ALLOWUNDO不就不放到回收站里面了!自己也该看看MSDN,知道怎么回事吧