频繁删除临时文件导致系统卡死?!

cylonspy 2010-09-20 09:07:03
我写的一个服务需要一直跑在服务器上,这个服务是用来执行一些特定的任务,每次执行任务的时候,都要生成大量的临时文件,数量在1万个以内,每个文件几百K,每次执行完任务,程序自动清除data文件夹下面的所有临时文件,每次执行任务时间大概是2分钟左右,但是经测试发现,每次系统在跑上几天以后,会卡死在清空文件夹这个函数上面,同时从资源管理器中打开这个文件夹时,Explorer也卡死,而且一旦程序卡死,从任务管理器中强制结束任务也结束不了,怎么关都关不了,只有重启服务器。

下面是清空文件夹的代码,大家帮我看看有什么问题么?
void CleanDir(const char *path)
{
char findstr[1200], fullname[1200];
strcpy(findstr, path);
strcat(findstr, "*.*");

WIN32_FIND_DATA ffd;
HANDLE h = FindFirstFile(findstr, &ffd);

if(h == INVALID_HANDLE_VALUE)
return ;

sprintf(fullname, "%s%s", path, ffd.cFileName);
DeleteFile(fullname);
while(FindNextFile(h, &ffd))
{
sprintf(fullname, "%s%s", path, ffd.cFileName);
DeleteFile(fullname);
}

FindClose(h);
}
...全文
220 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cylonspy 2010-09-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dingshaofengbinbin 的回复:]
这个绝对要用线程!!!
[/Quote]

这是为什么啊?
dingshaofengbinbin 2010-09-20
  • 打赏
  • 举报
回复
这个绝对要用线程!!!
cylonspy 2010-09-20
  • 打赏
  • 举报
回复
我现在的做法是用winexec删除。。。。
其实我也没办法,就是想试试瘟都死自己的程序会不会卡死。。。

那个函数被我改成这样了

void CleanDir(const char *path)
{
char buf[1000];
sprintf(buf, "cmd /c DEL /S /F /Q \"%s\"", path);

WinExec(buf, SW_HIDE);
}
cylonspy 2010-09-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 c6u5fyd 的回复:]
Sleep(1);
DeleteFile(fullname);
[/Quote]

交给线程处理的话,其实流程也一样的,主线程需要删除清空文件夹的时候,就开一个子线程处理,这个时候,主线程什么都不能做,只能等到子线程删除完成后,才能继续进行下一步流程。没办法,不能并行处理,业务流程就是这样的。
ahao 2010-09-20
  • 打赏
  • 举报
回复
直接删除目录
cylonspy 2010-09-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 huzhibin2000 的回复:]
建议:1.弄清楚DeleteFile能否删除目录
2.弄清楚是否删除了., ..等目录
3.弄清楚是否有扩展版本的函数DeleteFileEx等。
[/Quote]

为啥要Sleep(1)?不解,难道windows里面还有什么浅规则?
stonewater 2010-09-20
  • 打赏
  • 举报
回复
试试SHFileOperation函数
jason176374 2010-09-20
  • 打赏
  • 举报
回复
同意楼上。
删除文件统一交给一个线程处理。
孤客天涯 2010-09-20
  • 打赏
  • 举报
回复
放到线程里处理
田暗星 2010-09-20
  • 打赏
  • 举报
回复
Sleep(1);
DeleteFile(fullname);
huzhibin2000 2010-09-20
  • 打赏
  • 举报
回复
建议:1.弄清楚DeleteFile能否删除目录
2.弄清楚是否删除了., ..等目录
3.弄清楚是否有扩展版本的函数DeleteFileEx等。
2011-7-1世界之窗 3.5 正式版 (3.5.0.2)备用 更新:2011-07-01 08:08:18 平台:Win2000/XP/Vista/Win 7 2011年7月1日 修复大量兼容性问题,调整主站临时域名.推荐更新! 修复: 1.修复了无法访问原www.ioage.com主站的问题. 2.优化了部分启动代码,进一步提升主框架打开速度; 3.优化了flash加载机制,提升了没有flash元素页面的 加载速度; 4.修复了点开菜单栏中的菜单选项后,点击其他插件按 钮时,产生的闪屏问题; 5.修复了视频独立播放窗口关闭时,可能导致崩溃的问 题; 6.修复了一个退出时可能导致崩溃的问题; 7.修复了win7下,卸载浏览器后,任务栏锁定的图标删除 失败的问题; 8.修复了win7下,关闭预览图可能导致崩溃的问题; 9.修复了设置网页缩放比例后,重启浏览器时状态栏网 页缩放比例显示不正确的问题; 10.修复了当前为新建下载窗口时,关闭后台标签可能导 致的崩溃问题; 11.修复了在优酷网播放影片时可能导致崩溃的问题; 12.修复了某些情况下,关闭框架后,导致下载扩展崩溃 的问题; 13.修复了某些情况下可能产生崩溃的问题; 14.修复了创建进程的时候可能卡死的问题; 15.修复了频繁点击工具菜单项,可能导致崩溃的问题; 16.修复了当皮肤skin.ini中BarBorder的值比较大时, 导致搜索栏右侧按钮不显示的问题. 文件: TheWorld_3.5.0.2.exe 大小: 1648232 字节 文件版本: 3, 5, 0, 2 修改时间: 2011年7月1日 星期五, 20:15:22 MD5: B02CDA77DE437186AC3C6DD68F0B9376 SHA1: B8446CD4C7537856FB941D052CC91A0FAE3332B2 CRC32: D7C66934 文件: TheWorld_3.5.0.2.zip 大小: 1929974 字节 修改时间: 2011年7月1日 星期五, 20:15:55 MD5: 48ED6C74D9223420E0AE28D7F1AEF0FB SHA1: C01238F61B8BD45795FAFE2E8E4DFBB810BE24E6 CRC32: C2CC323B

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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