MFC获取电脑文件夹下文件的名称,类型,大小,后缀(附源码)

  • 测试工具
    VS2013
  • 需求
    主要获取电脑上面文件夹下的所有文件
  • 截图预览
    这里写图片描述
  • 部分代码
void CMFCApplication14Dlg::OnBnClickedOk()
{
    /************************************************************************/
    /* 获取文件夹路径 弹出对话框                                                 */
    /************************************************************************/
    char szPath[MAX_PATH];
    CString str2;
    ZeroMemory(szPath, sizeof(szPath));
    BROWSEINFO bi;
    bi.hwndOwner = this->GetSafeHwnd();
    bi.pidlRoot = NULL;
    bi.pszDisplayName = (LPWSTR)szPath;
    bi.lpszTitle = _T("请选择文件夹");
    bi.ulFlags = 0;
    bi.lpfn = NULL;
    bi.lParam = 0;
    bi.iImage = 0;

>   //弹出目录对话框
    LPITEMIDLIST lp = SHBrowseForFolder(&bi);
    if (lp == NULL)
    {
        return;
    }
    else
    {
        //SHGetPathFromIDList(lp,str2.GetBuffer(MAX_PATH)); //这里不知道为什么,若使用这句话,则对str进行str += "\\"的时候,str的值直接变成了"\\";
        SHGetPathFromIDList(lp, (LPWSTR)szPath);
        str2 = (LPWSTR)szPath;//文件夹路径
    }

    /************************************************************************/
    /*在文件夹路径下解析文件  把所需要的信息列在列表中(文件名,文件类型,文件大小,文件后缀)*/
    /************************************************************************/
    int row = m_list.GetItemCount();
    CFileFind myFile;
    CString FilePath;
    CString root = str2;//
    CString str;

    if (root.Right(1) != "//")
    {
        root += "//";
    }
    root += "*.*";
    BOOL res = myFile.FindFile(root);
    while (res)
    {
        res = myFile.FindNextFile();
        FilePath = myFile.GetFilePath();
        if (myFile.IsDirectory() && !myFile.IsDots())// 找到的是文件夹
        {
            FileSearch(FilePath);// 递归
        }
        else if (!myFile.IsDirectory() && !myFile.IsDots())// 找到的是文件
        {
            myFile.GetFilePath();//文件路径
            myFile.GetFileName();//文件名


            str.Format(_T("%dK"),myFile.GetLength()/1024);//文件大小

            CString extName = GetExtName(myFile.GetFileName());//文件名的后缀

            //获取文件类型信息
            SHFILEINFO sfi = { 0 };
            SHGetFileInfo(myFile.GetFileName(), 0, &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_TYPENAME);
            //MessageBox((CString)sfi.szTypeName);

            m_list.InsertItem(row, _T(""));
            m_list.SetItemText(row, 0, myFile.GetFileName());//文件名称
            m_list.SetItemText(row, 1, extName);//文件后缀
            m_list.SetItemText(row, 2, (CString)sfi.szTypeName);//文件类型
            m_list.SetItemText(row, 3, str);//文件大小
            m_list.SetItemText(row, 4, _T("未解锁"));
        }
    }

>}


>//文件的查找  自写函数
void CMFCApplication14Dlg::FileSearch(CString pszPath)
{
    CFileFind ff;
    CString FilePath;
    if (pszPath.Right(1) != "\\")
    {
        pszPath += "\\";
    }
    pszPath += "*.*";
    BOOL res = ff.FindFile(pszPath);
    while (res)
    {
        res = ff.FindNextFile();
        FilePath = ff.GetFilePath();

        if (ff.IsDirectory() && !ff.IsDots())// 找到的是文件夹
        {
            FileSearch(FilePath);// 递归
        }
        else if (!ff.IsDirectory() && !ff.IsDots())// 找到的是文件
        {
            //MoveFile--移动重命名
        }
    }
    return;
>}


>//显示文件名的后缀
CString CMFCApplication14Dlg::GetExtName(CString fileName)
{
    int pos = fileName.Find(_T(".")); //获取 . 的位置
    if (pos == -1){ //如果没有找到,直接返回该字符串
        return fileName;
    }
    else{
        return GetExtName(fileName.Mid(pos + 1)); //找到了的话,往深层遍历,直到最底层
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值