VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 231|回复: 2

[已解决]MFC 文件遍历 字符串拷贝等

[复制链接]
89_avatar_middle
最佳答案
1 
在线会员 发表于 2022-7-7 23:18:28 | 显示全部楼层 |阅读模式
//红色字体的就是执行不了的,不断点调试的话发现不了。。。
BOOL Delete_File(LPCTSTR lpszFolderPath)
{
        CString temp=lpszFolderPath;
        if (!lpszFolderPath || temp.GetLength()<= 0)return FALSE;
        TCHAR szFindPath[MAX_PATH] = { 0 },szOriginPath[MAX_PATH]={0};
        wcscpy(szFindPath, lpszFolderPath);
        if (szFindPath[_tcslen(szFindPath) - 1] == '\\')szFindPath[wcslen(szFindPath) - 1] = '\0';
        _stprintf(szOriginPath,szFindPath);

        WIN32_FIND_DATA FindData = { 0 };
        HANDLE pFind = FindFirstFile(szFindPath, &FindData);
        if (pFind == INVALID_HANDLE_VALUE) return FALSE;

        while (FindNextFile(pFind,&FindData))
        {
                if (FindData.cFileName[0] == '.') continue;//过滤.和..
                TCHAR szSubPath[MAX_PATH] = { 0 };
                _stprintf(szSubPath,L"%s\\%s",szOriginPath,FindData.cFileName);
                if (FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
                {
                        //如果是文件夹,进行递归
                        Delete_File(szSubPath);
                        RemoveDirectory(szSubPath);
                }
                else
                {
                        //是文件
                        DeleteFile(szSubPath);
                }
        }
        FindClose(pFind);
        return TRUE;
}
最佳答案
17_avatar_small
2022-7-8 14:57:43
本帖最后由 yoobaby 于 2022-7-8 15:01 编辑

跟那个红色的字应该没啥关系的,你的逻辑看得有点懵。大概改了下

主要懵的点是,你查找文件,从头到尾没看到你要查找的文件名,也没有类似*.*这样的通匹文件名。
你注意下 szFileName这个变量

  1. BOOL Delete_Files(LPCTSTR lpszFolderPath, LPCTSTR szFileName = TEXT("*.*"))
  2. {
  3.         CString temp = lpszFolderPath;
  4.         if (!lpszFolderPath || temp.GetLength() <= 0)return FALSE;
  5.         TCHAR szFindPath[MAX_PATH] = { 0 };
  6.         TCHAR szOriginPath[MAX_PATH] = { 0 };
  7.         _tcscpy(szFindPath, lpszFolderPath);

  8.         size_t pathLen = _tcslen(szFindPath);
  9.         if (szFindPath[pathLen - 1] != '\\')
  10.                 _tcscat(szFindPath, TEXT("\")); // 这边是两个\ ,为知道为什么论坛会转义掉

  11.         _tcscpy(szOriginPath, szFindPath);
  12.         _tcscat(szFindPath, szFileName);

  13.         WIN32_FIND_DATA FindData = { 0 };
  14.         HANDLE pFind = FindFirstFile(szFindPath, &FindData);
  15.         if (pFind == INVALID_HANDLE_VALUE) return FALSE;

  16.         while (FindNextFile(pFind, &FindData))
  17.         {
  18.                 if (FindData.cFileName[0] == '.') continue;
  19.                 TCHAR szSubPath[MAX_PATH] = { 0 };
  20.                 _stprintf(szSubPath, L"%s%s", szOriginPath, FindData.cFileName);
  21.                 if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  22.                 {
  23.                         Delete_Files(szSubPath);
  24.                         RemoveDirectory(szSubPath);
  25.                 }
  26.                 else
  27.                 {
  28.                         DeleteFile(szSubPath);
  29.                 }
  30.         }
  31.         FindClose(pFind);
  32.         return TRUE;
  33. }

  34. //调用
  35.         Delete_Files(L"T:\\test");
复制代码

执行到这会跳转至第二张截图那个界面

执行到这会跳转至第二张截图那个界面

第二张截图

第二张截图




上一篇:为什么多线程和单线程返回的父窗口指针不一样?
下一篇:2010版本 中CreateFile等关键词不高亮,怎么设置
35_avatar_middle
最佳答案
0 
在线会员 发表于 2022-7-8 14:23:09 | 显示全部楼层
感觉很厉害的样子
17_avatar_middle
最佳答案
35 
在线会员 发表于 2022-7-8 14:57:43 | 显示全部楼层    本楼为最佳答案   
bestAnswer
本帖最后由 yoobaby 于 2022-7-8 15:01 编辑

跟那个红色的字应该没啥关系的,你的逻辑看得有点懵。大概改了下

主要懵的点是,你查找文件,从头到尾没看到你要查找的文件名,也没有类似*.*这样的通匹文件名。
你注意下 szFileName这个变量

  1. BOOL Delete_Files(LPCTSTR lpszFolderPath, LPCTSTR szFileName = TEXT("*.*"))
  2. {
  3.         CString temp = lpszFolderPath;
  4.         if (!lpszFolderPath || temp.GetLength() <= 0)return FALSE;
  5.         TCHAR szFindPath[MAX_PATH] = { 0 };
  6.         TCHAR szOriginPath[MAX_PATH] = { 0 };
  7.         _tcscpy(szFindPath, lpszFolderPath);

  8.         size_t pathLen = _tcslen(szFindPath);
  9.         if (szFindPath[pathLen - 1] != '\\')
  10.                 _tcscat(szFindPath, TEXT("\")); // 这边是两个\ ,为知道为什么论坛会转义掉

  11.         _tcscpy(szOriginPath, szFindPath);
  12.         _tcscat(szFindPath, szFileName);

  13.         WIN32_FIND_DATA FindData = { 0 };
  14.         HANDLE pFind = FindFirstFile(szFindPath, &FindData);
  15.         if (pFind == INVALID_HANDLE_VALUE) return FALSE;

  16.         while (FindNextFile(pFind, &FindData))
  17.         {
  18.                 if (FindData.cFileName[0] == '.') continue;
  19.                 TCHAR szSubPath[MAX_PATH] = { 0 };
  20.                 _stprintf(szSubPath, L"%s%s", szOriginPath, FindData.cFileName);
  21.                 if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  22.                 {
  23.                         Delete_Files(szSubPath);
  24.                         RemoveDirectory(szSubPath);
  25.                 }
  26.                 else
  27.                 {
  28.                         DeleteFile(szSubPath);
  29.                 }
  30.         }
  31.         FindClose(pFind);
  32.         return TRUE;
  33. }

  34. //调用
  35.         Delete_Files(L"T:\\test");
复制代码
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2022-8-15 12:01

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表