【文件属性】:
文件名称:DELPHI搜索文件的示例
文件大小:690KB
文件格式:RAR
更新时间:2016-11-19 18:29:53
DELPHI
搜索TXT 文件的示例unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls,
Vcl.ExtCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
Memo2: TMemo;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
ButtonSearchFile: TButton;
FolderPath: TEdit;
FileExt: TEdit;
ProgressBar1: TProgressBar;
procedure ButtonSearchFileClick(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure SearchFile1(FileName: string; FindText: string);
function MakeFileList(Path, FileExt: string): TStringList;
function FileInUsed(FileName: TFileName): Boolean;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses StrUtils;
{$R *.dfm}
{
Search Options
KeyWord in file
FileName
FileSize
FileCreateTime
FileModifyTime
keyword
filepath
openfile
found
addListbox
}
var
FileNamePathList, FileNameList: TStringList;
procedure TForm1.FormCreate(Sender: TObject);
begin
FileNameList := TStringList.Create;
FileNamePathList := TStringList.Create;
end;
{
if FileInUsed
('D:\Administrator\Documents\MyProjects\FileSearch\Win32\Debug\Project1.exe')
then
ShowMessage('File is in use.')
else
ShowMessage('File not in use.');
}
function TForm1.FileInUsed(FileName: TFileName): Boolean;
var
HFileRes: HFILE;
begin
Result := False;
if not FileExists(FileName) then
Exit; // 如果文件不存在,返回false
HFileRes := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result := (HFileRes = INVALID_HANDLE_VALUE);
if not Result then
CloseHandle(HFileRes);
end;
procedure TForm1.SearchFile1(FileName: string; FindText: string);
var
SearchList: TStringList;
begin
try
SearchList := TStringList.Create;
if FileExists(FileName) and (not FileInUsed(FileName)) then
begin
SearchList.LoadFromFile(FileName);
if Boolean(Pos(UpperCase(FindText), UpperCase(SearchList.Text))) then
begin
FileNameList.Add(ExtractFileName(FileName));
FileNamePathList.Add(FileName);
end;
end;
finally
SearchList.Free;
end;
end;
procedure TForm1.ButtonSearchFileClick(Sender: TObject);
var
I, n: Integer;
List: TStringList;
begin
try
ButtonSearchFile.Caption := 'SearchFile';
List := TStringList.Create;
List.Clear;
FileNameList.Clear;
FileNamePathList.Clear;
List := MakeFileList(FolderPath.Text, FileExt.Text);
ProgressBar1.Max := List.Count;
for I := 0 to List.Count - 1 do
begin
Application.ProcessMessages;
SearchFile1(List[I], Edit1.Text);
ProgressBar1.Position := I;
end;
ListBox1.Items.Text := FileNameList.Text;
ButtonSearchFile.Caption := IntToStr(FileNamePathList.Count) + ' 条';
finally
List.Free;
end;
end;
{
这个过程得显示进度
}
function TForm1.MakeFileList(Path, FileExt: string): TStringList;
var
sch: TSearchrec;
begin
Result := TStringList.Create;
if RightStr(Trim(Path), 1) <> '\' then
Path := Trim(Path) + '\'
else
Path := Trim(Path);
if not DirectoryExists(Path) then
begin
Result.Clear;
Exit;
end;
if FindFirst(Path + '*', faAnyfile, sch) = 0 then
begin
repeat
Application.ProcessMessages;
if ((sch.Name = '.') or (sch.Name = '..')) then
Continue;
if DirectoryExists(Path + sch.Name) then
begin
Result.AddStrings(MakeFileList(Path + sch.Name, FileExt));
end
else
begin
if (UpperCase(ExtractFileExt(Path + sch.Name)) = UpperCase(FileExt))
or (FileExt = '.*') then
Result.Add(Path + sch.Name);
end;
until FindNext(sch) <> 0;
FindClose(sch);
end;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
s: string;
txt: string;
begin
if not FileExists(FileNamePathList[ListBox1.ItemIndex]) then
Exit;
Memo2.Lines.LoadFromFile(FileNamePathList[ListBox1.ItemIndex]);
Caption := FileNamePathList[ListBox1.ItemIndex];
txt := Form1.Memo2.Text;
if Boolean(Pos(UpperCase(Edit1.Text), UpperCase(txt))) then
begin
Memo2.SetFocus;
Memo2.SelStart := Pos(UpperCase(Edit1.Text), UpperCase(txt)) - 1;
Memo2.SelLength := Length(Edit1.Text);
end;
end;
end.
【文件预览】:
FileSearch
----Win32()
--------Release()
----Project1.res(61KB)
----Project1.identcache(149B)
----Unit1.dfm(3KB)
----Project1.dproj.local(2KB)
----Project1.dpr(234B)
----Unit1.pas(5KB)
----Project1.dproj(9KB)