BGDK111 发表于 2024-11-24 06:15

WIndowMFC的简单使用IO流

文件I/O的使用 当你们看到这个b东西时候是不是怀念C库了 其实这个很好用
CFileFind 使用这个就可以 操作文件了 , 首先来弄个操作文件 但是不用 因为看标题 我们学的是MFC 所以 我们使用 MFC自带的FindFileFindFilepstrName: 一个指针,指向包含要查找文件的名称的字符串。 如果为 pstrName 传递 NULL ,则 FindFile 将执行通配符 (.) 搜索。 dwUnused: 预留用于使用派生类实现 FindFile 多态。 必须为 0。这是适用例 首先记住findfile是BOOL 类型 void CUIDlg::OnBnClickedFile()
{
    CFileFind finder;
    BOOL bWorking = finder.FindFile(_T("E:\\HMCL-3.5.8\\*.*"));// 如果 还有目录就是1 没了返回0*.*表示所有文件*是通配符 . * 是任意文件后缀
    while (bWorking)// 循环判断
    {
      bWorking = finder.FindNextFile();   // 如果没了那么就会返回0 值
      OutputDebugString((LPCTSTR)finder.GetFileName());// 获取名字
      OutputDebugString(_T("\n"));
      OutputDebugString((LPCTSTR)finder.GetFilePath());// 获取路径
    }
}
​        当然捏 我们可以加强一下ok 做处理 另写参数递归void Enumfile(CString pRootDir) {
    pRootDir += "\\*.*";
    CFileFind finder;
   
    BOOL bWorking = finder.FindFile(pRootDir);// 如果 还有目录就是1 没了返回0*.*表示所有文件*是通配符 . * 是任意文件后缀
    while (bWorking)
    {
      bWorking = finder.FindNextFile();
      if (finder.GetFileName() == "." || finder.GetFileName() == "..")// 判断上级,目录和本目录. ..的存在
      {
            continue;// 过滤跳过本次循环输出
      }

      OutputDebugString((LPCTSTR)finder.GetFileName());
      OutputDebugString(_T("\n"));
    /*OutputDebugString((LPCTSTR)finder.GetFilePath());*/
    }
}

    void CUIDlg::OnBnClickedFile()
    {
      Enumfile(_T("E:\\HMCL-3.5.8"));
   
    }

优化一下 肯定能跑 但是发现欸? 怎么回事 子目录但是跑不了我们需要 通过递归的方式来获取子目录的 内容void Enumfile(CString pRootDir) {
    pRootDir += "/*.*";
    CFileFind finder;
    CString Root;
    BOOL bWorking = finder.FindFile(pRootDir);// 如果 还有目录就是1 没了返回0*.*表示所有文件*是通配符 . * 是任意文件后缀
    while (bWorking)
    {
      
      bWorking = finder.FindNextFile();
   
      if (finder.GetFileName() == "." || finder.GetFileName() == "..")// 判断上级,目录和本目录. ..的存在
      {
            continue;
      }
      if (finder.IsDirectory()) {// 判断是否为目录
               
            AfxOutputDebugString(_T("Root :%s"), (LPCTSTR)finder.GetFileName());// 输出根节点
            OutputDebugString(_T("\n"));
            Enumfile(finder.GetFilePath());// 递归获取路径
      }
      else
      {
            OutputDebugString((LPCTSTR)finder.GetFileName());
            OutputDebugString(_T("\n"));
            
      }
    }
   
}这样的优化就可以 实现 获取文件 目录备注:GetVomlume 是system级别的 可以试试

Qinmuyi 发表于 2024-11-24 08:53

多谢分享

a7720779 发表于 2024-11-24 09:42

多谢分享
页: [1]
查看完整版本: WIndowMFC的简单使用IO流