清泛IT社区

搜索
App Inventor 2 中文社区 轻松创建Apps

扫码访问移动社区 移动社区,您的掌上技术专家

关注我,精彩不错过! 关注我,精彩不错过!

扫码安装最新版AI伴侣 最新版AI伴侣v2.69

Aia Store .aia 源码一站式解决方案 发布日志AI2连接测试ai2Starter模拟器

开通VIP送小红花App Inventor 2 拓展有奖征文 VIP会员享专有教程,免费赠送基础版*技术支持服务! AI2入门必读中文文档中文教程IoT专题

查看: 526|回复: 0
打印 上一主题 下一主题

vc/mfc *通配符 批量删除文件

  • TA的每日心情
    开心
    2024-02-17 18:16
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    546

    主题

    715

    帖子

    1万

    积分

    管理员

    这里没有广告...

    Rank: 9Rank: 9Rank: 9

    积分
    10689
    QQ
    跳转到指定楼层
    楼主
    发表于 2016-02-26 15:59:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    直接上代码,可直接运行亲测有效,使用SHFileOperation函数:
    1. #include "stdafx.h"
    2. #include <windows.h>

    3. int _tmain(int argc, _TCHAR* argv[])
    4. {
    5.         LPTSTR delFileName = L"c:/test/test*.txt";

    6.         SHFILEOPSTRUCT FileOp;
    7.         ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));

    8.         FileOp.fFlags = FOF_NO_UI;
    9.         FileOp.wFunc = FO_DELETE;
    10.         FileOp.pFrom = delFileName;
    11.         FileOp.pTo = NULL;

    12.         if (SHFileOperation(&FileOp) != 0)
    13.                 printf("删除文件:%S失败(Error:%d)\n", delFileName, GetLastError());

    14.         return 0;
    15. }
    复制代码
    经过测试,文件路径必须为绝对路径,相对路径会操作失败。
    获取当前路径拼上相对路径代码如下:
    1. char szDelPath[MAX_PATH + 1] = { 0 };
    2. GetCurrentDirectory(MAX_PATH, szDelPath);
    3. CString delFileName;
    4. delFileName.Format("%s\\test_*.xml", szDelPath);
    复制代码


    --------------------------------------------
    补充:
    不过SHFileOperation方法有时不起作用,用起来结果飘忽不定,详见:http://bbs.csdn.net/topics/390691058
    路径末尾加上'\0'也一样,笔者亲测,删除有时成功有时失败。

    改用C++的FindNextFile,支持 * 通配符查找文件,核心代码如下:
    1. WIN32_FIND_DATA FindFileData;
    2. char szCurPath[MAX_PATH + 1] = { 0 };
    3. GetCurrentDirectory(MAX_PATH, szCurPath);
    4. CString findFileName;
    5. findFileName.Format("%stest*.txt", szCurPath);

    6. HANDLE hFind = ::FindFirstFile(findFileName, &FindFileData);
    7. if(INVALID_HANDLE_VALUE != hFind)
    8. {
    9.        do {                        
    10.              findFileName.Format("%s%s", szCurPath, FindFileData.cFileName);
    11.              DeleteFile(findFileName);
    12.        } while(FindNextFile(hFind, &FindFileData));

    13.        FindClose(hFind);
    14. }
    复制代码

    清泛网 - 专注IT技能提升
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    © 2024 tsingfun.com, Inc.  沪ICP备2020034476号-1  沪公网安备31011702000040号

    GMT+8, 2024-05-12 15:24 , Processed in 0.017627 second(s), 37 queries .