删除目录的问题 对于一个有文件的目录,我使用DeleteFile()函数将里面的文件全部删除后在用RemoveDirectory()函数来删除目录.但是每次都只删除了文件,目录没有删除。请问一下这是什么原因啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 进dos方式用rd 能删除么? 把目录里的文件全部删除后 用RemoveDirectory()删除该目录 此时失败把程序退出 重新启动后再用RemoveDirectory()删除就可以不知道什么原因哦 你可能执行了chdir或者SetCurrentDirectory,这些API会使目录锁定,你应该chdir或SetCurrentDirectory到父目录或者别的目录,然后再删除。 删除文件夹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; } jameshooo你是说在RemoveDirectory()之前执行一下chdir或SetCurrentDirectory吗? sangermax试了你提供的函数 和我的是一样的效果 最后剩下空的目录删不掉 直接用System(del filename);命令就可以了, 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把目录锁定了。 用SHFileOperation函数吧,更方便一些。删除不掉目录最可能的原因有两个,一个是你Find的句柄没关;另一个就是你的当前目录在该目录下。另外系统也有bug,有时候就是没法删除必须重新启动系统。 用SHFileOperation进行删除目录是很方便的!Sample Code:SHFILEOPSTRUCT fileop;fileop.hwnd = NULL;fileop.wfunc = FO_DELET; //Operation to performfileop.pto = "C:\\test";fileop.pto = NULL;fileop.fflags= FOF_SILENT/FOF_NOCONFIRMATION ; //Flags that control the file operationSHFileOperation(& fileop); 同意ls的.SHFileOperation最方便. 对,在删除之前要chdir到别的目录,否则目录被锁定后无论用哪种方式都无法删除文件夹 tempFind.Close(); //加入这句话,把当前的工作目录换到C:\盘根目录。这样你才能删除你的目录。否则肯定失败。前面几位已经讲得很明白了。SetCurrentDirectory("C:\\"); if(!RemoveDirectory(sDirName)) { return FALSE; } return TRUE; } 如果你用对话框选择目录来删除,就可能出现这种情况。删除文件的API不应该去修改当前目录的 是应用程序当前工作目录的问题,用在删除文件前用GetCurrentDirectory取出目录,删除文件用SetCurrenctDirectory设置目录,然后删除目录.即:1、GetCurrentDirectory2、删除目录中的文件3、SetCurrentDirectory4、删除目录RemoveDirectory 获取了绝对路径,如何在m_pConnection->Open里面使用啊?ADO连接access 关于Fromhandle函数和vc中的临时对象(郁闷) 100分求助winsock问题 请教一个SDK下的问题! 请问挂机软件是什么原理 在ado中把数据库中的时间搜索出来后用什么数据类型对应啊,救命!!! 有谁知道一次去掉程序中所用的断点的快捷健 CTreeCtrol 动态刷新问题 MFC 类向导对话框,编辑事件对话框显示不正常,如图 怎么打开一个USB接口? 最简单的图形编程 任务栏位置的问题
把程序退出 重新启动后再用RemoveDirectory()删除就可以不知道什么原因哦
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;
}
你是说在RemoveDirectory()之前执行一下chdir或SetCurrentDirectory吗?
试了你提供的函数 和我的是一样的效果
最后剩下空的目录删不掉
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把目录锁定了。
删除不掉目录最可能的原因有两个,一个是你Find的句柄没关;另一个就是你的当前目录在该目录下。另外系统也有bug,有时候就是没法删除必须重新启动系统。
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);
SHFileOperation最方便.
//加入这句话,把当前的工作目录换到C:\盘根目录。这样你才能删除你的目录。否则肯定失败。前面几位已经讲得很明白了。
SetCurrentDirectory("C:\\");
if(!RemoveDirectory(sDirName))
{
return FALSE;
}
return TRUE;
}
1、GetCurrentDirectory
2、删除目录中的文件
3、SetCurrentDirectory
4、删除目录RemoveDirectory