SerchDisk.cpp
上传用户:deyixm
上传日期:2007-01-06
资源大小:43k
文件大小:4k
源码类别:

行业应用

开发平台:

Visual C++

  1. //---------------------------------------------------------------------------
  2. // ClassExplorer Pro generated source file
  3. // Created by 颜承 on 99-11-24, 17:28:33
  4. //---------------------------------------------------------------------------
  5. // TSerchDisk 用递归法搜索磁盘目录的类
  6. // 版权所有(C)2000 颜承
  7. // 这一程序是自由软件,
  8. // 你可以遵照自由软件基金会出版的GNU通用公共许可证条款来修改和重新发布这一程序。
  9. // 发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定目的的隐含的担保。
  10. // 更详细的情况请参阅GNU通用公共许可证。
  11. // 你应该已经和程序一起收到一份GNU通用公共许可证的副本。
  12. // 我的联系方式:桂林集琦药业股份有限公司技术部(541004)
  13. // E-Mail: ycshowtop@sohu.com
  14. //-------------------------------------------------------------------------------
  15. #include "SerchDisk.h"
  16. //---------------------------------------------------------------------------
  17. int __fastcall TSerchDisk::Serch()
  18. {
  19.  int i;
  20.  if(FFilterCount>0){  //对搜索条件处理,加上".",变成大写
  21.     for(i=0;i<FFilterCount;i++) {
  22.        FilterString[i]=FilterString[i].UpperCase();
  23.        if(FilterString[i][1]!='.')
  24.           FilterString[i]=AnsiString(".")+FilterString[i];
  25.     }
  26.  }
  27.  else if(FFilterCount<0) IsAll=true;    //搜索全部文件
  28.  if(!FPathName.IsEmpty()){        //开始搜索...
  29.      FindDisk(FPathName);
  30.      return FFileList->Count;
  31.  }
  32.  else return 0;
  33. }
  34. //--------------------------------------------------------------------------
  35. __fastcall TSerchDisk::TSerchDisk()
  36. {
  37.  FFilterCount=0;
  38.  IsAll=false;
  39.  AddDir=false;
  40.  PathName=AnsiString("");
  41.  FFileList = new TStringList(); //存放结果
  42. }
  43. //--------------------------------------------------------------------------
  44. __fastcall TSerchDisk::~TSerchDisk()
  45. {
  46.  delete FFileList;
  47. }
  48. //--------------------------------------------------------------------------
  49. //工作函数
  50. void __fastcall TSerchDisk::FindDisk(AnsiString PathName)
  51. {
  52.  TSearchRec fRec;
  53.  AnsiString filestring,tmpPathName;
  54.  bool HaveBeen;
  55.  int i;
  56.  PathName.Trim();
  57.  int k= PathName.Length();
  58.  if(PathName[k]!='\') PathName += AnsiString("\");
  59.  tmpPathName=PathName+AnsiString("*.*");
  60.  //找第一个文件
  61.  if(FindFirst(tmpPathName,faAnyFile,fRec)==0 ) {
  62.      if(fRec.Attr==faDirectory) {  //如是目录
  63.         if(fRec.Name!=AnsiString(".") && fRec.Name!=AnsiString("..")){
  64.            tmpPathName = PathName + fRec.Name+AnsiString("\");
  65.            FindDisk(tmpPathName);  //递归调用本身
  66.         }
  67.      }
  68.      else {          //不是目录
  69.         HaveBeen=false;
  70.         for(i=0;i<FFilterCount;i++) { //是否在条件内
  71.            if(fRec.Name.UpperCase().AnsiPos(FilterString[i])!=0) {HaveBeen=true;  break;}
  72.         }
  73.         if(HaveBeen==true || IsAll==true) {         //如符合条件
  74.            FFileList->Add(PathName + fRec.Name.Trim());
  75.         }
  76.      }
  77.  }
  78.  else return;
  79.  while(1) {
  80.    if(FindNext(fRec)==0 ) {
  81.       if(fRec.Attr==faDirectory) {
  82.          if(fRec.Name!=AnsiString(".") && fRec.Name!=AnsiString("..")){
  83.             tmpPathName = PathName +fRec.Name + AnsiString("\");
  84.             if(AddDir==true) FFileList->Add(tmpPathName);
  85.             FindDisk(tmpPathName);
  86.          }
  87.       }
  88.       else {
  89.          HaveBeen=false;
  90.          for(i=0;i<FFilterCount;i++) {
  91.            if(fRec.Name.UpperCase().AnsiPos(FilterString[i])!=0) {HaveBeen=true;  break;}
  92.          }
  93.          if(HaveBeen==true || IsAll==true) {
  94.             FileList->Add(PathName + fRec.Name.Trim());
  95.          }
  96.       }
  97.    }
  98.    else break;
  99.  }
  100. }
  101. //---------------------------------------------------------------------------