吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 130|回复: 2
上一主题 下一主题
收起左侧

[学习记录] WIndowMFC的简单使用IO流

[复制链接]
跳转到指定楼层
楼主
BGDK111 发表于 2024-11-24 06:15 回帖奖励
文件I/O的使用 当你们看到这个b东西时候是不是怀念C库了 其实这个很好用

CFileFind 使用这个就可以 操作文件了 , 首先来弄个操作文件 但是不用 因为看标题 我们学的是MFC 所以 我们使用 MFC自带的FindFile
FindFilepstrName: 一个指针,指向包含要查找文件的名称的字符串。 如果为 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
多谢分享
3#
a7720779 发表于 2024-11-24 09:42
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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