求助啊 如何删除文件夹啊 100分

allenhiman 2013-08-01 03:09:24
需求:比如我要删除一个文件,但是该文件可能当时无法删除 因为可能有人在打开它
那么可以用Removefileex设定重启后删除

那么同样的需求是 我如何设定一个目录在重启后删除呢?
这个目录里面的结构不确定,或者有文件.

实际上 是在制作MSI安装包时遇到问题的。 用的是WIX3.5
如果wix本身能解决此问题 那就更好啦。 现在想的是利用C++代码解决.

暂时无思路啊~~~~~啊
...全文
297 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangk 2013-08-07
  • 打赏
  • 举报
回复
先用正常的删除一遍。然后对无法删除的文件和文件夹特殊处理 方法1:MoveFileEx文件夹下的文件到本卷下的根目录,然后设置属性为隐藏,然后将空目录删除 方法2:可以枚举所有进程引用的句柄,强制关闭,然后再删除 方法3:可以使用驱动直接发删除的IRP到文件系统
oyljerry 2013-08-07
  • 打赏
  • 举报
回复
引用 13 楼 allenhiman 的回复:
[quote=引用 12 楼 oyljerry 的回复:] [quote=引用 11 楼 allenhiman 的回复:] [quote=引用 10 楼 oyljerry 的回复:] [quote=引用 8 楼 allenhiman 的回复:] [quote=引用 5 楼 oyljerry 的回复:] 遍历后对所有文件,文件夹MoveFileEx
如此考虑过 确认的是不是空文件夹的文件夹 无法用MoveFileEx删除 如此一来 就不太好办[/quote] 空文件夹一样可以删除的[/quote] 斑竹 我的意思是 我如何能保证下次启动后 要删除的那个文件夹是空的呢[/quote] 不是很明白到底什么意思,下次启动后,要删除的文件夹是不是空的有什么关系吗[/quote] 因为非空文件夹无法用movefileex删除 已经得到验证 那么假设我要删除的文件夹F有三个文件A,B,C,那么按照枚举的逻辑就是分别对A,B,C,F调用movefileex 那么系统重启后 如何保证是先删除A,B,C再删除F呢。 而实际上我要删除的目录有上万个文件 目录结构要复杂的多。 恐怕会更复杂一些[/quote] 既然你们都有服务了,那么服务启动的时候全删好了
向立天 2013-08-07
  • 打赏
  • 举报
回复
引用 14 楼 allenhiman 的回复:
我现在只是想解决这个疑问 因为我们同系列的产品 有固定的启动服务 可以通过某种方式交由服务做这件事。
如果你的产品本身有服务在运行 你可以写个配置文件告诉它让它在启动时完成删除工作
allenhiman 2013-08-07
  • 打赏
  • 举报
回复
我现在只是想解决这个疑问 因为我们同系列的产品 有固定的启动服务 可以通过某种方式交由服务做这件事。
allenhiman 2013-08-07
  • 打赏
  • 举报
回复
引用 12 楼 oyljerry 的回复:
[quote=引用 11 楼 allenhiman 的回复:] [quote=引用 10 楼 oyljerry 的回复:] [quote=引用 8 楼 allenhiman 的回复:] [quote=引用 5 楼 oyljerry 的回复:] 遍历后对所有文件,文件夹MoveFileEx
如此考虑过 确认的是不是空文件夹的文件夹 无法用MoveFileEx删除 如此一来 就不太好办[/quote] 空文件夹一样可以删除的[/quote] 斑竹 我的意思是 我如何能保证下次启动后 要删除的那个文件夹是空的呢[/quote] 不是很明白到底什么意思,下次启动后,要删除的文件夹是不是空的有什么关系吗[/quote] 因为非空文件夹无法用movefileex删除 已经得到验证 那么假设我要删除的文件夹F有三个文件A,B,C,那么按照枚举的逻辑就是分别对A,B,C,F调用movefileex 那么系统重启后 如何保证是先删除A,B,C再删除F呢。 而实际上我要删除的目录有上万个文件 目录结构要复杂的多。 恐怕会更复杂一些
allenhiman 2013-08-07
  • 打赏
  • 举报
回复
感谢各位了 我也不深究了 结贴吧
oyljerry 2013-08-06
  • 打赏
  • 举报
回复
引用 11 楼 allenhiman 的回复:
[quote=引用 10 楼 oyljerry 的回复:] [quote=引用 8 楼 allenhiman 的回复:] [quote=引用 5 楼 oyljerry 的回复:] 遍历后对所有文件,文件夹MoveFileEx
如此考虑过 确认的是不是空文件夹的文件夹 无法用MoveFileEx删除 如此一来 就不太好办[/quote] 空文件夹一样可以删除的[/quote] 斑竹 我的意思是 我如何能保证下次启动后 要删除的那个文件夹是空的呢[/quote] 不是很明白到底什么意思,下次启动后,要删除的文件夹是不是空的有什么关系吗
allenhiman 2013-08-06
  • 打赏
  • 举报
回复
引用 10 楼 oyljerry 的回复:
[quote=引用 8 楼 allenhiman 的回复:] [quote=引用 5 楼 oyljerry 的回复:] 遍历后对所有文件,文件夹MoveFileEx
如此考虑过 确认的是不是空文件夹的文件夹 无法用MoveFileEx删除 如此一来 就不太好办[/quote] 空文件夹一样可以删除的[/quote] 斑竹 我的意思是 我如何能保证下次启动后 要删除的那个文件夹是空的呢
oyljerry 2013-08-05
  • 打赏
  • 举报
回复
引用 8 楼 allenhiman 的回复:
[quote=引用 5 楼 oyljerry 的回复:] 遍历后对所有文件,文件夹MoveFileEx
如此考虑过 确认的是不是空文件夹的文件夹 无法用MoveFileEx删除 如此一来 就不太好办[/quote] 空文件夹一样可以删除的
allenhiman 2013-08-05
  • 打赏
  • 举报
回复
至于设置启动目录 用个EXE什么的 固然可行 但是真心不想如此 本身就是个安全软件 这些操作显得不好啊
allenhiman 2013-08-05
  • 打赏
  • 举报
回复
引用 5 楼 oyljerry 的回复:
遍历后对所有文件,文件夹MoveFileEx
如此考虑过 确认的是不是空文件夹的文件夹 无法用MoveFileEx删除 如此一来 就不太好办
allenhiman 2013-08-02
  • 打赏
  • 举报
回复
up up来人啊
琅琊榜 2013-08-02
  • 打赏
  • 举报
回复
把程序放到启动目录里吧,启动就运行
Eleven 2013-08-02
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/80038224
oyljerry 2013-08-02
  • 打赏
  • 举报
回复
遍历后对所有文件,文件夹MoveFileEx
allenhiman 2013-08-01
  • 打赏
  • 举报
回复
否则用SHFileOperation就可以了 那个事即时删除的
allenhiman 2013-08-01
  • 打赏
  • 举报
回复
小哥 我需要的是 在重启后再删除啊
vicagogo 2013-08-01
  • 打赏
  • 举报
回复

BOOL DeleteDirectory(const CString& strDirName)
{
	CFileFind theFind;
	CString tempFileFind(strDirName + _T("\\*.*"));
	BOOL bFinded = theFind.FindFile(tempFileFind);
	//遍历并删除文件
	while(bFinded)
	{
		bFinded = theFind.FindNextFile();
		if(!theFind.IsDots())
		{
			CString foundFileName(theFind.GetFileName());
			if(theFind.IsDirectory())
			{
				CString tempDir = strDirName + _T("\\")+foundFileName;
				DeleteDirectory(tempDir);	//递归进行子目录查找
			}
			else
			{
				CString tempFileName = strDirName + _T("\\")+foundFileName;
				DeleteFile(tempFileName);
			}
		}
	}

	theFind.Close();
	//删除空的目录
	if(!RemoveDirectory(strDirName))
	{
		return FALSE;
	}
	return TRUE;

}
提供目录名,删除整个目录

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧