还在苦苦敲代码开发APP?你out啦! 试试积木搭建APP吧~

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

来源:清泛原创     2016-06-07 10:47:52    人气:     我有话说( 0 人参与)

直接上代码,可直接运行亲测有效,使用SHFileOperation函数:#include "stdafx.h"#include <windows.h>int _tmain(int argc, _TCHAR*...

直接上代码,可直接运行亲测有效,使用SHFileOperation函数:
#include "stdafx.h"
#include <windows.h>

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

        SHFILEOPSTRUCT FileOp; 
        ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));

        FileOp.fFlags = FOF_NO_UI;
        FileOp.wFunc = FO_DELETE;
        FileOp.pFrom = delFileName;
        FileOp.pTo = NULL;

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

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



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

改用C++的FindNextFile,支持 * 通配符查找文件,核心代码如下:

WIN32_FIND_DATA FindFileData;
char szCurPath[MAX_PATH + 1] = { 0 };
GetCurrentDirectory(MAX_PATH, szCurPath);
CString findFileName;
findFileName.Format("%stest*.txt", szCurPath);

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

       FindClose(hFind);
}

通配符 批量删除 SHFileOperation

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: