己百之 2019-09-30 15:21 采纳率: 0%
浏览 763

关于FindNextFile()遍历目录的问题,会遍历莫名其妙东西

我要实现的功能是“我这有1万个文件夹,分成每个文件夹三百个子文件夹,数量由用户指定”

(注意,我指的是“文件夹”,不是某个具有后缀的文件。)

因为公司有业务上的需要,做一个这样的小工具能节省人工。

我在MFC中的界面是这样的(非专业开发人员,经验不足,正在学习中!)

图片说明

这个button按钮的处理事件如下:

void CFileXDlg::OnBnClickedButton1()
{
    //获取控件数据
    CString strS;
    GetDlgItem(IDC_EDIT1)->GetWindowText(strS);
    strS+='\0';
    CString strD;
    GetDlgItem(IDC_EDIT2)->GetWindowText(strD);
    strD+='\0';
    UpdateData();
    UINT num=GetDlgItemInt(IDC_EDIT3),n=2;

    CFileFind finder;
    BOOL b=finder.FindFile(strS); //获取源路径地址
    while(b)
    {
        if(n>=num)break;else n++; //计数器
        b=finder.FindNextFile();
        if(finder.IsDirectory()){
             CString strFilePath=finder.GetFilePath();
             CString strFileName=finder.GetFileName();
             strFilePath+='\0'; //不确定这行到底有用没用

             SHFILEOPSTRUCT fp;
             fp.wFunc=FO_COPY;  //FO_MOVE
             fp.pFrom=strFilePath;
             fp.pTo=strD;
             if(SHFileOperation(&fp)==0)
             {
                ::MessageBox(NULL,strFilePath,TEXT("复制成功"),MB_OK);
             }else
                 //失败的提示
        }else
            MessageBox(CString("这不是目录"));
    }
}

这是个半成品,之前在XP上的VC6.0写的,先遍历目录复制,然后删除,达到移动的目的,你可能会问为什么不直接用FO-MOVE ???
说来也奇怪,这个结构体参数,一直用不成,在win10上运行差点要删除我的磁盘分区?难道是XP和Win10的这个API定义不一样吗?

但在Win10系统上,遇到Debug和Release问题,没办法就直接在Win10上直接开发了。

图片说明

  • 写回答

2条回答 默认 最新

  • JonathanYan 2019-09-30 16:13
    关注

    是要把源目录下的文件复制到目标目录么

    评论

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型