CFileFind filfind;
BOOL bwork=filfind.FindFile("D:\\Documents and Settings\\administrator\\Local Settings\\Temporary Internet Files\\*.*");
while(bwork)
{
bwork=filfind.FindNextFile();
if(filfind.IsDots()) continue;
CString szfilename=filfind.GetFilePath();
DeleteFile(szfilename);
}

解决方案 »

  1.   

    你在Win2000以上的版本吗?是的话,需要放开您的权限,否则是删不掉的
      

  2.   

    试试这个:
    我们知道CfileFind未提供直接遍历其子目录的功能,而有时候我们却常常要遍历某一目录下的所有文件及其子目录。如我们要删除一个目录,而这个目录下又有子目录,因为Windows不允许删除非空的目录,因此我们必须能够遍历一个目录下的所有子目录,这可以通过简单的递归实现.     下面让我们从一个简单的例子开始:如何删除某一目录?(假设我们通过DeleteDirectory(LPCTSTR DirName)函数完成这一功能)    要删除一个目录,我们要完成下面几步:    1. 删除该目录下的所有文件    2. 如果该目录中还有子目录我们要递归地调用DeleteDirectory(LPCTSTR DirName)函数,以删除该子目录下的所有文件    3. 调用RemoveDirectory(LPCTSTR lpPathName)删除该目录DeleteDirectory(LPCTSTR DirName)函数的完整实现如下:
    BOOL DeleteDirectory(LPCTSTR DirName)
    {
    CFileFind tempFind; file://声明一个CFileFind类变量,以用来搜索
    char tempFileFind[200]; file://用于定义搜索格式
    sprintf(tempFileFind,"%s\\*.*",DirName);
    file://匹配格式为*.*,即该目录下的所有文件 BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
    file://查找第一个文件
    while(IsFinded)
    {
    IsFinded=(BOOL)tempFind.FindNextFile(); file://递归搜索其他的文件 
    if(!tempFind.IsDots()) file://如果不是"."目录
    {
    char foundFileName[200];
    strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
    if(tempFind.IsDirectory()) file://如果是目录,则递归地调用
    { file://DeleteDirectory
    char tempDir[200];
    sprintf(tempDir,"%s\\%s",DirName,foundFileName);
    DeleteDirectory(tempDir);
    }
    else
    { file://如果是文件则直接删除之
    char tempFileName[200];
    sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
    DeleteFile(tempFileName);
    }
    }
    }
    tempFind.Close();
    if(!RemoveDirectory(DirName)) file://删除目录
    {
    AfxMessageBox("删除目录失败!",MB_OK);
    return FALSE;
    }
    return TRUE;
    }
     
        通过上面的例子,详细读者已学会了如何递归遍历某一目录下的所有文件及子目录了。实际上利用这一点可以作出非常有用的工具。下面我给大家举个小例子。    用VC编写程序的时候,VC会生成一大堆的中间文件,这些中间文件的体积十分庞大,一般比我们编写的代码要大出10倍以上。当我们想要把我们编写的源代码保留起来,以供以后查阅时,我们不得不手动删除这些中间文件,而有些时候,你想查看以前某个工程的运行结果,于是你编译该工程,经常这样做的话,如果你不删除VC生成的中间文件,你的硬盘很快就会被一大堆的中间文件塞满。于是我编写了一个VC的中间文件清理工具。其原理非常简单:    首先,让用户指定一个需要清理的目录,然后我们通过CFileFind递归地遍历该目录,查找目录名为Debug和Release的目录(这是VC默认的输出目录,如果你更改了缺省设置的话,必须手动删除之),然后调用上面我们编写的DeleteDirectory函数删除之。    警告:使用该工具时,一定要确保你的工程没有叫Debug或Release的,而且你的有用的目录名也不能是Debug或Release,否则,使用本工具会全部把它们删掉的。    另外,本工具也能统计源程序的规模(给出整个工程的行数、c文件数、h文件数和cpp文件数及总的文件数目),你可以用它方便地统计出自己源程序的规模。统计源程序规模的原理也是递归地查找某一目录,其原理和上面讲的DeleteDirestory函数是一致的。    有了该工具你再也不用手动清理自己机子上那一大堆的中间文件了,当你需要把自己的工程目录保存起来,以供以后查阅时,你就可以通过该工具彻底地清理一下中间文件,平时你再也不用去管那些令人讨厌的中间文件了。
      

  3.   

    我用DeleteFile(szfilename);也是经常不行。
    后来改用CFile::Remove(szfilename)
    这是一个静态函数
      

  4.   

    to nbgyf(梅花峰) :首先非常感谢你提供的资料。是的,我就是在2000下,我想删除临时文件,但是无法删除,如果在我建立的D:\test目录下就能把所有文件删除。我的问题暂时不设计子目录的问题。。
    to zhf0021(屡战屡败,屡败屡战) :谢谢你提供的方法,我是一下,行了就揭贴!
      

  5.   

    Maybe system protect the files, u can make the way that zhf0021 have writed.
      

  6.   

    嘿嘿..我知道你的問題.
    請在前面加入
    ::SetFileAttributes(szfilename,FILE_ATTRIBUTE_NORMAL);//這句最好加.
    DeleteFile(szfilename);
      

  7.   

    to zhf0021(屡战屡败,屡败屡战) 我将 DeleteFile(szfilename);改成CFile::Remove(szfilename)结果报了运行时错误。请问应该怎么改才行呢,需不需要给CFile建立一个实例呢?
      

  8.   

    to YP2002CN(老婆我不敢了,老婆我愛你)我试了你的方法,还是不行,当我的filefinder发现了一个扩展名为.ie5的文件后,他就在也找不到别的文件了,也就是FindNextFile()返回值为0,可是明明我的Temporary Internet Files里面有无数多的文件。
      

  9.   

    我也碰到过这样的问题,我后来实现的方法是
    把文件名用一个列表保存起来,搜索完后,再用
    DeleteFile(),主要是CFileFind类造成的
      

  10.   

    to : LinHanLao(凌寒) ,每次finder发现了一个*.ie5后,就无法再继续搜索了,也就是说。我根本得不到文件列表
      

  11.   

    我給你一個我寫得.看來你是想刪除某一個目錄的所有文件.包括目錄.
    DeleteFolderAllFiles(CString csFolderName)
    {
      CFileFind f;
      BOOL bFind=f.FindFile(csFolderName+"\\*.*");
      while(bFind)
      {
        bFind = f.FindNextFile();
        if(f.IsDots()) continue;
        if(f.IsDirectory())
        {
          _rmdir(csFolderName+"\\"+f.GetFileName());
          DeleteFolderAllFiles(csFolderName+"\\"+f.GetFileName());
        }
      ::SetFileAttributes(csFolderName+"\\"+f.GetFileName(),FILE_ATTRIBUTE_NORMAL);
        ::DeleteFile(csFolderName+"\\"+f.GetFileName());
        TRACE(_T("%s\r\n"),f.GetFileName());
      }
      _rmdir(csFolderName);
    }
    //2000掉用兩次.第一次清空.第二次刪除目錄
    也就是這樣掉用
    CString szPath="D:\\Documents and Settings\\administrator\\Local Settings\\Temporary Internet Files";
    1.DeleteFolderAllFiles(szPath);
      _rmdir(szPath)
    2.DeleteFolderAllFiles(szPath);
      DeleteFolderAllFiles(szPath);
    你可能沒有處理子目錄.你看f.IsDirectory(..這你沒有判斷
      

  12.   

    to YP2002CN(老婆我不敢了,老婆我愛你),谢谢你的关注 
    我看这个文件夹是特别文件夹,我用了你的方法还是里面的东西还是删不掉:(
      

  13.   

    临时文件不好删
    http://www.vckbase.com/document/viewdoc.asp?id=280