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

来源:互联网 发布:网络接收器怎么用 编辑:程序博客网 时间:2024/06/05 14:30
  • 测试工具
    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)); //找到了的话,往深层遍历,直到最底层    }}
  • 写的比较匆忙这里附源码
    源码下载
1 0
原创粉丝点击