对于一个有文件的目录,我使用DeleteFile()函数将里面的文件全部删除后在用RemoveDirectory()函数来删除目录.但是每次都只删除了文件,目录没有删除。请问一下这是什么原因啊?

解决方案 »

  1.   

    进dos方式用rd 能删除么?
      

  2.   

    把目录里的文件全部删除后 用RemoveDirectory()删除该目录 此时失败
    把程序退出 重新启动后再用RemoveDirectory()删除就可以不知道什么原因哦
      

  3.   

    你可能执行了chdir或者SetCurrentDirectory,这些API会使目录锁定,你应该chdir或SetCurrentDirectory到父目录或者别的目录,然后再删除。
      

  4.   

    删除文件夹
    BOOL DeleteDirectory(char* sDirName) 

        CFileFind tempFind; 
        char sTempFileFind[200] ;
        
        sprintf(sTempFileFind,"%s\\*.*",sDirName); 
        BOOL IsFinded = tempFind.FindFile(sTempFileFind);      while (IsFinded) 
    {  
            IsFinded = tempFind.FindNextFile(); 
            
            if (!tempFind.IsDots()) 
            {  
                char sFoundFileName[200]; 
                strcpy(sFoundFileName,tempFind.GetFileName().GetBuffer(200)); 
                
                if (tempFind.IsDirectory())  
                { 
                    char sTempDir[200]; 
                    sprintf(sTempDir,"%s\\%s",sDirName,sFoundFileName); 
                    DeleteDirectory(sTempDir);  
                } 
                else 

                    char sTempFileName[200]; 
    sprintf(sTempFileName,"%s\\%s",sDirName,sFoundFileName); 
    DeleteFile(sTempFileName);
                } 
            } 
        } 
        tempFind.Close(); 
        if(!RemoveDirectory(sDirName))  

            return FALSE; 
        } 
        return TRUE; 
      

  5.   

    jameshooo
    你是说在RemoveDirectory()之前执行一下chdir或SetCurrentDirectory吗?
      

  6.   

    sangermax
    试了你提供的函数 和我的是一样的效果 
    最后剩下空的目录删不掉
      

  7.   

    直接用System(del filename);命令就可以了,
      

  8.   

    CString dir;
    CString file; dir = "D:\\1";
    file = "d:\\1\\1.txt"; ::SetCurrentDirectory(dir); if(!::DeleteFile(file))
    {
    MessageBox("file");
    } ::SetCurrentDirectory("d:\\"); if(!::RemoveDirectory(dir))
    {
    MessageBox("dir");
    }
    在删除文件夹下的文件后,我把当前目录改变了下,就可以把文件夹删除了。原因可能就如jameshooo 所说的,用的API把目录锁定了。
      

  9.   

    用SHFileOperation函数吧,更方便一些。
    删除不掉目录最可能的原因有两个,一个是你Find的句柄没关;另一个就是你的当前目录在该目录下。另外系统也有bug,有时候就是没法删除必须重新启动系统。
      

  10.   

    用SHFileOperation进行删除目录是很方便的!Sample Code:SHFILEOPSTRUCT  fileop;
    fileop.hwnd  =  NULL;
    fileop.wfunc = FO_DELET;   //Operation to perform
    fileop.pto   = "C:\\test";
    fileop.pto   = NULL;
    fileop.fflags= FOF_SILENT/FOF_NOCONFIRMATION ;  //Flags that control the file operation
    SHFileOperation(& fileop);
      

  11.   

    同意ls的.
    SHFileOperation最方便.
      

  12.   

    对,在删除之前要chdir到别的目录,否则目录被锁定后无论用哪种方式都无法删除文件夹
      

  13.   

    tempFind.Close();  
    //加入这句话,把当前的工作目录换到C:\盘根目录。这样你才能删除你的目录。否则肯定失败。前面几位已经讲得很明白了。
    SetCurrentDirectory("C:\\"); 
    if(!RemoveDirectory(sDirName))   
    {  
            return FALSE;  
        }  
        return TRUE;  
      

  14.   

    如果你用对话框选择目录来删除,就可能出现这种情况。删除文件的API不应该去修改当前目录的
      

  15.   

    是应用程序当前工作目录的问题,用在删除文件前用GetCurrentDirectory取出目录,删除文件用SetCurrenctDirectory设置目录,然后删除目录.即:
    1、GetCurrentDirectory
    2、删除目录中的文件
    3、SetCurrentDirectory
    4、删除目录RemoveDirectory