查找文件 CFileFind类

查找文件

 CFileFind

 提取文件图标

 显示大图标

 显示小图标

 

 

 一、查找文件

  1CFileFind

 //c:\mydir\myfile.txt

GetFileName

获取文件名 myfile.txt

GetFilePath

获取文件路径c:\mydir\myfile.txt

GetFileTitle

获取文件标题 myfile

Close

关掉搜索请求,释放掉占用资源

 

FindFile

搜索目录,成功返回非零值,否则返回0

 

FindNextFile

继FindFile后查找下一个文件,最后一个文件时返回

 

    

 

IsReadOnly

Determines if the found file is read-only.

IsDirectory

Determines if the found file is a directory.

IsCompressed

Determines if the found file is compressed.

IsSystem

Determines if the found file is a system file.

IsHidden

Determines if the found file is hidden.

IsTemporary

Determines if the found file is temporary.

 

 

 二、提取文件图标

WINSHELLAPI DWORD WINAPI SHGetFileInfo(

    LPCTSTR pszPath, //文件路径

    DWORD dwFileAttributes, //文件属性 忽略

    SHFILEINFO FAR *psfi,//返回文件信息

    UINT cbFileInfo, //SHFILEINFO 结构大小

    UINT uFlags //文件标志 SHGFI_ICON

);

三、代码测试

CListCtrl* m_list1=(CListCtrl*)GetDlgItem(IDC_LIST1);         

                   

                  int indeximage;

                   imagelistb.Create(32,32,ILC_COLOR32|ILC_MASK,0,0);//创建图标列表                 

                           //imagelistb.Add(AfxGetApp()->LoadIcon(IDR_MAINFRAME));            

                   

                           CFileFind   cFindFiles;

                           WCHAR szFileName[256];

                           WCHAR found[200];

                            swprintf(szFileName,L"%s//*.* ",L"C:\\");

                            BOOL bFound=cFindFiles.FindFile(L"C:\\//*.*");

                           //

                           while(bFound)//这个循环是枚举文件的

                           {

                                    bFound=(BOOL)cFindFiles.FindNextFile();

                                     if(!cFindFiles.IsDirectory())

                                     {

                                             wcscpy(found,cFindFiles.GetFilePath().GetBuffer(200));

                                             SHFILEINFO shfi;

                                             memset(&shfi,0,sizeof(shfi));

                                             SHGetFileInfo(found,

                                                      0,

                                                      &shfi, sizeof(shfi),

                                                      SHGFI_ICON  );  //获取文件信息,含图标的

                                             indeximage=imagelistb.Add( shfi.hIcon);//向ImageList里面添加图标shfi.hIcon

                                              

                                             int nCount=m_list1->GetItemCount();

                                             m_list1->InsertItem(nCount,found,nCount);

                                              

                                     }

                           } 

           

                             m_list1->SetImageList(&imagelistb,LVSIL_NORMAL); //设置图标

                             m_list1->SetImageList(&imagelistb,LVSIL_SMALL);

                 

 

int CDialog_ListCtrl_Test::OnInitDialog(void)

{

         //添加项目

         CListCtrl* plst_ctl=(CListCtrl*)GetDlgItem(IDC_LIST1);

         //添加图标

         m_imagelist_b.Create(32,32,ILC_COLOR32|ILC_MASK ,0,0);

         m_imagelist_s.Create(16,16,ILC_COLOR32|ILC_MASK ,0,0);

         plst_ctl->SetImageList(&m_imagelist_b,LVSIL_NORMAL   );//大图标

         plst_ctl->SetImageList(&m_imagelist_s,LVSIL_SMALL   );

        

         /*plst_ctl->InsertItem(0,L"0000",0);

         plst_ctl->InsertItem(1,L"1111",0);

         plst_ctl->InsertItem(2,L"2222");

         plst_ctl->InsertItem(3,L"aaaaa");

         plst_ctl->SetItemText(3,0,L"33333");*/

         CFileFind findfile;

         int nfound=findfile.FindFile(L"C:\\Windows\\//*.*");

         int i=0;

          while(nfound)

          {

                   nfound=findfile.FindNextFile();

                   if (findfile.IsDirectory())

                   {

                            continue;

                   }

                   SHFILEINFO finfo;

                   //获取文件信息,主要图标icon

                   SHGetFileInfo(findfile.GetFilePath(),0,&finfo,sizeof(finfo),SHGFI_ICON );

                   //添加文件项目和图标

                   m_imagelist_s.Add(finfo.hIcon);//向ImageList里添加图标资源

                   plst_ctl->InsertItem(i++,findfile.GetFileName(), m_imagelist_b.Add(finfo.hIcon));

          }

         findfile.Close();//释放资源

         return 0;

}

 

****************************************************************************

  获取CListCtrl选中文本      

  ShellExecute打开外部文件

 

 

一、CListCtrl::GetFirstSelectedItemPosition

CListCtrl::GetFirstSelectedItemPosition

POSITION GetFirstSelectedItemPosition( ) const;

//返回选中项目的位置

二、CListCtrl::GetNextSelectedItem

CListCtrl::GetNextSelectedItem

int GetNextSelectedItem( POSITION& pos ) const;

//返回选中项目的索引值

 

三、ShellExecute函数

  HINSTANCE ShellExecute(

    HWND hwnd, //指定父窗口句柄,此参数可为NULL

    LPCTSTR lpOperation, //操作方式

    LPCTSTR lpFile, //要打开的文件名,一般是全路径的如 c:\\1.txt

    LPCTSTR lpParameters, //要带的参数

    LPCTSTR lpDirectory,//默认运行目录

    INT nShowCmd //显示方式

); 

 

 

四、代码示例

  void CDialog_ListCtrl_Test::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)

{

 

        LPNMITEMACTIVATE pNMItemActivate = (LPNMITEMACTIVATE)(pNMHDR);

         // TODO: 在此添加控件通知处理程序代码

         CListCtrl* plst_ctl=(CListCtrl*)GetDlgItem(IDC_LIST1);

         POSITION  pos=plst_ctl->GetFirstSelectedItemPosition();

         if (pos)

         {

                  int item=plst_ctl->GetNextSelectedItem(pos);

                  CString ws=plst_ctl->GetItemText(item,0); //获取文件名

                  TRACE("%ws \n",ws);

                  CString filepath;

                  filepath=L"C:\\Windows\\";

                  ws=filepath+ws; //算出文件路径

                  ShellExecute(0,L"open",ws,NULL,NULL,SW_SHOW); //打开文件

 

         }

          

         *pResult = 0;

}

//

void CDialog_ListCtrl_Test::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)

{

         LPNMITEMACTIVATE pNMItemActivate = (LPNMITEMACTIVATE)(pNMHDR);

         // TODO: 在此添加控件通知处理程序代码

         //获取文件目录路径及文件

         CListCtrl* plst_ctl=(CListCtrl*)GetDlgItem(IDC_LIST1);

         //获取ListCtrl选中项的位置

         POSITION pos=plst_ctl->GetFirstSelectedItemPosition();

         if (pos)

         {

                  int item_index=plst_ctl->GetNextSelectedItem(pos);

                  //获取选中图标的文件名

                  CString filename=plst_ctl->GetItemText(item_index,0);

                  filename=FileDir+filename;

                  TRACE("%ws \n",filename);

                  ShellExecuteW(0,NULL,filename,NULL,NULL,SW_SHOWNORMAL);

         }

 

         *pResult = 0;

}

         

转载于:https://www.cnblogs.com/15157737693zsp/p/3841167.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值