2 qq 28254507 qq_28254507 于 2016.02.27 10:57 提问

MFC RemoveDirectory()后CreateDirectory()失败的问题

MFC RemoveDirectory()后CreateDirectory()失败的问题
不知道怎么回事。。
当我删除文件夹后再创建同名文件夹时竟然失败了。。
删除的函数是正常的,先递归删除文件夹内所有文件,然后把此空文件夹删掉

调试时感觉貌似RemoveDirectory()有一定延时。。因为我执行完删除函数打开路径查看删除情况时,发现被删除的文件夹还在。。接着重新创建就失败了。。

但是如果我执行创建文件夹,然后再删除,打开路径查看时文件夹已经移除了。。

这是怎么回事啊。。

    DeleteFolder(m_fileName + "\\" + ptheTree->GetItemText(m_item));
    RemoveDirectory(m_fileName + "\\" + ptheTree->GetItemText(m_item));
 void TreeView::DeleteFolder(CString directory_path)
{
    CFileFind finder;
    CString path;
    path.Format("%s/*.*", directory_path);
    BOOL bWorking = finder.FindFile(path);
    while (bWorking){
        bWorking = finder.FindNextFile();
        if (finder.IsDirectory() && !finder.IsDots()){            //处理文件夹  
            DeleteFolder(finder.GetFilePath());          //递归删除文件夹  
            RemoveDirectory(finder.GetFilePath());
        }
        else{                                                     //处理文件  
            DeleteFile(finder.GetFilePath());
        }
    }
}

1个回答

caozhy
caozhy   Ds   Rxr 2016.02.27 13:32
已采纳

RemoveDirectory,如果你的目录下面有文件或者子目录,必须先删除它们,否则会导致失败。

qq_28254507
qq_28254507 这个我注意到了。递归就是先把文件夹内所有文件删除完了,使之成为空文件夹再删除的。这里我已经找到问题了。因为没有关闭FindFirstFile创建的搜索句柄
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
c++新建删除文件夹方法CreateDirectory RemoveDirectory
遇到一个问题就是从注册表读取到数据存储路径后,由于所调用的接口只能设置已存在的文件夹,所以就想着在读取到路径之后,就先创建文件夹,然后调用接口就没问题了。 找到的方法如下: CreateDirectory Creates a new directory. If the underlying file system supports security on files and direct
CreateDirectory(…)执行失败,GetLastError()返回错误码5
{     DeleteDirectory(strPath);     if (!CreateDirectory(strPath, NULL))     {         DWORD dwError = GetLastError();         ...     } } 最近帮测试部门写了一个模拟http并
Windows API一日一练(51)CreateDirectory和RemoveDirectory函数
在信息爆炸的年代里,把各种信息分类已经是一种非常必要的功能,比如把股票行情数据保存到硬盘里,就需要分开几个目录保存。比如你写LOG到硬盘时,也需要分成几个目录来保存,这样让维护人员很好地找到出错的信息,或者有用的信息。像我在开发银行的信用卡系统时,就需要把所有通过网络传送的数据全部生成文本文件保存到当日的目录里,也就是说每天都需要创建一个目录,把所有交易的数据生成LOG保存进去。那么面对这样的需求
CreateDirectory和RemoveDirectory函数
在信息爆炸的年代里,把各种信息分类已经是一种非常必要的功能,比如把股票行情数据保存到硬盘里,就需要分开几个目录保存。比如你写LOG到硬盘时,也需要分成几个目录来保存,这样让维护人员很好地找到出错的信息,或者有用的信息。像我在开发银行的信用卡系统时,就需要把所有通过网络传送的数据全部生成文本文件保存到当日的目录里,也就是说每天都需要创建一个目录,把所有交易的数据生成LOG保存进去。那么面对这样的需求
Windows API CreateDirectory和RemoveDirectory 新建目录和删除目录
Windows API函数CreateDirectory创建目录,当然目录过多时也需要调用函数RemoveDirectory来删除不需要的目录,然而函数RemoveDirectory只能删除空的目录,也就是目录下没有文件和子目录才能删除。函数CreateDirectory和RemoveDirectory声明如下:WINBASEAPIBOOLWINAPICreateDirectoryA(    __in     LPCSTR lpPathName,    __in_opt LPSECURITY_ATTRIBU
如何删除空文件夹RemoveDirectory
//CString strPath = _T("C:\\test");  //删除空文件夹 WCHAR  strPath[] = _T("C:\\test.txt");  if (!::RemoveDirectory(strPath)) { DWORD nErro = ::GetLastError(); //AfxMessageBox(_T("删除空文件夹失败!")); ::Messa
CreateDirectory的使用
CreateDirectory这个函数的作用是创建一个新的目录。如果底层文件系统支持文件和目录上的安全描述,该功能可将指定的安全描述到新的目录。 函数原型: BOOL CreateDirectory(   LPCTSTR lpPathName,   LPSECURITY_ATTRIBUTES lpSecurityAttributes ); 参数:    pPathName:长指针,指
MFC用CreateDirectory创建文件目录
CreateDirectory这个函数的作用是创建一个新的目录。如果底层文件系统支持文件和目录上的安全描述,该功能可将指定的安全描述到新的目录。 函数原型: BOOL CreateDirectory(   LPCTSTR lpPathName,   LPSECURITY_ATTRIBUTES lpSecurityAttributes ); 参数:     pPathName:
CFtpConnection之CreateDirectory、GetCurrentDirectory、SetCurrentDirectory的使用
FTP站点目录是C:\\Data,我们如何将本地文件上传到FTP服务器的C:\\Data\\data目录下?使用CreateDirectory、GetCurrentDirectory、SetCurrentDirectory函数就可以很好的实现。一下省略掉FTP其它的一些连接操作: 方法一: CString strFtpPath,strUP; pFtpConnection->GetC
MFC 中 删除一个非空文件夹 (MFC 文件操作 一)
      最近在看MFC 的文件操作,从网上淘了一本比较讲MFC文件操作比较全的电子书,然后开始试手。在删除文件夹时,遇到了问题,通过查看MSDN和网友的论坛留言,自己总算是解决了这个问题,现在与大家共享。      MFC中提供了删除文件夹的一个封装函数 RemoveDirectory(LPCTSTR lpPathName),我们只要把要删除的文件夹的路径传进去就可以删除了,貌似一切如此简单。我象征性的建立一个文件夹,然后在程序中删除了它,呵呵,一下就成功了。正当我要转手去做另外的操作时,我喜欢乱尝试的