刚开始学vc,,问个问题
我想实现一个功能,选择系统的一个文件夹,然后能在控件里面把这个文件夹下的所有文件都读取出来,然后能对这些文件进行查询查找.不知能做到吗?

解决方案 »

  1.   

    oid CXMLToolDlg::ShowFiles(HTREEITEM hTree)
    {
     HANDLE hFile;
     WIN32_FIND_DATA c_file;
     char strFile[4096] = "";
     
     CString str,str1;
     DWORD dwNum = 0;
     
     hFile = FindFirstFile( "*", &c_file );
     
     //表示当前文件夹为空
     if (INVALID_HANDLE_VALUE == hFile)
      return;
     
     //检查找到的第一个实体是否是一个目录
     if ( c_file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
     {//是目录
      if ( 46 != c_file.cFileName[0])
      {
       HTREEITEM hTree1;
       hTree1 = m_ctrlTree.InsertItem(c_file.cFileName, hTree, TVI_SORT);   _chdir(c_file.cFileName);//切换到子目录下
       ShowFiles(hTree1);
       _chdir("..");//返回
      }
     }
     else
     {
      //每次找到的第一个 总是"."文件夹
      /*GetFullPathName(c_file.cFileName, sizeof(strFile), strFile, NULL);
     
      ::GetFileVersionInfo(strFile, NULL, GetFileVersionInfoSize(strFile, 0), strFileVersion );
      memset(strFile, 0, sizeof(strFile));
      str1.Format("%-30s",c_file.cFileName);
      str.Format("%s%s",str1,strFileVersion);
      m_ctrlTree.InsertItem(str, hTree, TVI_SORT);
      str = str1 = "";
      memset(strFile, 0, sizeof(strFileVersion));*/
     }
     while( FindNextFile( hFile, &c_file ) ) 
     {
      if ( c_file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
      {//是目录
       if (46 != c_file.cFileName[0])
       {
        HTREEITEM hTree1;
        hTree1 = m_ctrlTree.InsertItem(c_file.cFileName, hTree, TVI_SORT);    _chdir(c_file.cFileName);//切换到子目录下
        ShowFiles(hTree1);
        _chdir("..");//返回
       }
      }
      else
      {   memset(strFile, 0, sizeof(strFile));
       char Version[4096];
       char *pVersion = GetFileVersion(c_file);
       if (NULL == pVersion)
        str.Format("%-30s该文件没有版本信息",c_file.cFileName);
       else
       {
        for(int i = 0; i < 4096; i++)
         Version[i] = *(pVersion + i);
        str1.Format("%-30s",c_file.cFileName);
        str.Format("%s%s",str1,Version);
       }
       m_ctrlTree.InsertItem(str, hTree, TVI_SORT);
       str = str1 = "";
      }
     }
     FindClose( hFile ); }
      

  2.   

    这个应该不难的,读取文件很轻松,可用CFile类,查找也不难,可用CFileFind类来遍历查找。。
    CFileFind finder;
    BOOL bWorking = finder.FindFile("*.*");
    while(bWorking)
    {
     bWorking = finder.FindNextFile();
    }
      

  3.   

       那你从控件里面直接读取到各个文件夹的路径名,然后再把他_splitpath把路径分解,再把name和ext部分进行验证,看是否是你要的文件,就好了