搜索具有特定名称delphi的bmp文件

时间:2015-04-15 12:08:49

标签: delphi delphi-7

我在目录和子目录中有bmp文件。 例如:\ fileserver \ dir + subdir

bmp文件名例如是dddklk85243ggg.bmp

问题:

我需要通过85243搜索文件,当找到第一个然后将其放在图像上时。

我知道根据文件名找到文件:

uses FindFile;
 ...
 procedure Tform1.Button2Click(Sender: TObject) ;
 var DFile : TFindFile;
 begin
   DFile := TFindFile.Create(nil) ;
   try
    DFile.FileAttr := [ffaAnyFile];
    DFile.InSubFolders := True;
    DFile.Path := ExtractFilePath(ParamStr(0)) ;
    DFIle.FileMask := '*.bmp';

    Memo1.Lines := DFile.SearchForFiles;
   finally
    DFile.Free;
   end;
 end;

但如何检查文件名是否包含某些字符串?

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

{: Search files in a directory; You can especify a mask for files.
   Optionaly you can especify recursively=True for subdirectories.
StartDir Folder ti serach.
FileMask Mask for files.
Recursively if you want searcjh on subdirectories.
FilesList  TStringList with names of files (path).
}
procedure FindFiles(StartDir, FileMask: string; 
                 recursively: boolean; var FilesList: TStringList);
const
  MASK_ALL_FILES = '*.*';
  CHAR_POINT = '.';
var
  SR: TSearchRec;
  DirList: TStringList;
  IsFound: Boolean;
  i: integer;
begin

  if (StartDir[length(StartDir)] <> '\') then begin
    StartDir := StartDir + '\';
  end;

  // Crear la lista de ficheros en el dir. StartDir (no directorios!)
  // Start with the search
  IsFound := FindFirst(StartDir + FileMask, 
                  faAnyFile - faDirectory, SR) = 0;

  // MIentras encuentre
  // while found files...
  while IsFound do begin
    FilesList.Add(StartDir + SR.Name);
    IsFound := FindNext(SR) = 0;
  end;

  FindClose(SR);

  // Recursivo? 
  if (recursively) then begin
    // Build a list of subdirectories
    DirList := TStringList.Create;
    // proteccion
    try
      IsFound := FindFirst(StartDir + MASK_ALL_FILES, 
                   faAnyFile, SR) = 0;
      while IsFound do begin
        if ((SR.Attr and faDirectory) <> 0) and 
          (SR.Name[1] <>  CHAR_POINT) then begin
          DirList.Add(StartDir + SR.Name);
          IsFound := FindNext(SR) = 0;
        end; // if
      end; // while
    FindClose(SR);
    // Scan the list of subdirectories
    for i := 0 to DirList.Count - 1 do begin
      FindFiles(DirList[i], FileMask, recursively, FilesList);
    end;

    finally
      DirList.Free;
    end;
  end;
end;

您可以通过以下方式调用该程序:

var
  filesList:TStringList;
begin
  ...
  FindFiles('\fileserver\dir\' + subdir, '*85243*.bmp', True, filesList);
...

问候。