Разработка файловой оболочки
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
t; Length(FR) then
EndFor:=Length(MaskR)
else
EndFor:=Length(FR);
if (MaskR[2]=*) and (FR<>) then
begin
j:=Length(MaskR);
for i:=Length(FR) downTo Length(Fr)-EndFor do
begin
if (MaskR[j]=FR[i]) and (MaskR[j]<>*) then
begin
j:=j-1;
R:=True;
end
Else
if (MaskR[j]=*) and (R=True) then
begin
break;
end
else
begin
R:=False;
Break;
end;
end;
end;
If MaskR[Length(MaskR)]=* then
begin
j:=1;
for i:=1 to EndFor do
begin
if (MaskR[j]=FR[i]) and (MaskR[j]<>*) then
begin
j:=j+1;
R:=True;
end
else
begin
if (MaskR[j]=*) and (R=True) then
begin
break;
end
else
begin
R:=False;
Break;
end;
end;
end;
end;
for i:=0 to Length(MaskR) do
if MaskR[i]<>* then
tmp:=True
else
begin
tmp:=False;
break;
end;
if tmp then
if Length(MaskR)=Length(FR) then
begin
for i:=0 to Length(FR) do
if MaskR[i]=FR[i] then
R:=True
else
begin
R:=False;
break;
end;
end
else
begin
R:=False;
end;
//вроде конец с мучениями по расширению
//начало мучений с именем
if R then
begin
if Length(MaskN)<Length(FN) then
EndFor:=Length(MaskN)
else EndFor:=Length(FN);
if MaskN[1]=* then
begin
j:=Length(MaskN);
for i:=Length(FN) downto Length(FN)-EndFor do
begin
if (MaskN[j]=FN[i]) and (MaskN[j]<>*) then
begin
j:=j-1;
R:=True;
end
else
begin
if (MaskN[j]=*)and(R=True) then
begin
break;
end
else
begin
r:=false;
break;
end;
end;
end;
end;
if MaskN[Length(MaskN)]=* then
begin
j:=0;
for i:=0 to EndFor do
begin
if (MaskN[j]=FN[i]) and (MaskN[j]<>*) then
begin
j:=j+1;
r:=True;
end
else
begin
if (MaskN[j]=*)and(R=True) then
break
else
begin
R:=False;
break;
end;
end;
end;
end;
for i:=0 to Length(MaskN) do
if MaskN[i]<>* then
tmp:=True
else
begin
tmp:=False;
break;
end;
if tmp then
if Length(MaskN)<>Length(FN) then
r:=False
else
begin
for i:=0 to Length(MaskN) do
if MaskN[i]=FN[i] then
r:=True
else
begin
r:=False;
break;
end;
end;
end;
CompareFileWithMask:=R;
end;
Procedure FindFile;
// Поиск файла
Var
Dir:string;
SubDir:string;
Dr:Char;
begin
//Поиск в текущей директории
If FindForm.RBCurDir.Checked then
begin
Dir:=FindForm.LCurDir.Caption;
if Dir[Length(Dir)]<>\ then
Dir:=Dir+\;
FindForm.FindInCurrentDir(Dir);
end;
//Поиск на текущем диске
If FindForm.RBCurDrive.Checked then
begin
Dir:=FindForm.LCurDir.Caption;
if Dir[Length(Dir)]<>\ then
Dir:=Dir+\;
FindForm.FindInCurrentDir(Dir);
end;
//Поиск на всех дисках
If FindForm.RBAllDrives.Checked then
begin
FindInAllDr;
end;
end;
Procedure TFindForm.FindInCurrentDir(CurDir:string);
//Рекурсивная Процедура поиска в текущей директории и поддиректориях
Var
SizeF:integer;
i:integer;
EndList:boolean;
F:TSearchRec;
D:string;
Key:Char;
begin
FindForm.StatusFind.Panels[1].Text:=CurDir;
FindFirst(CurDir+*.*,faAnyFile,F);
FindNext(F);
repeat
// вставить АSМовый код для прерывания по клавише ESC
faDirectory)then"> If FindForm.CBAdvSearch.Checked and (F.Attr<>faDirectory) then
begin
StrToInt(FindForm.SGreater.Text))))thenContinue;"> if not(((F.Size StrToInt(FindForm.SGreater.Text)))) then Continue;
FindForm.DateIsAfter.Date)))thenContinue;"> if not(((FileDateTime(CurDir+F.Name) FindForm.DateIsAfter.Date))) then Continue;
end;
if F.Attr=faDirectory then
.)and(F.Name..) then
begin
FindInCurrentDir(CurDir+F.Name+\);
end;
..)and(F.Name.) then
if CompareFileWithMask(F.Name) then
begin
FindForm.FileWasFind.Items.Add(CurDir+F.Name);
FindForm.StatusFind.Panels[0].Text:=IntToStr(StrToInt(FindForm.StatusFind.Panels[0].Text)+1);
FindForm.FileWasFind.Refresh;
end;
Until((FindNext(F) <> 0));{ and (KeyPressed));}
FindClose(F);
end;
Procedure FindInAllDr;
//Поиск на всех дисках
Var
Dir:string;
i:integer;
begin
for i:=1 to MainForm.DrBox.Items.Count-1 do
begin
dir:=MainForm.DrBox.Items.Strings[i];
dir:=UpperCase(dir[1]);
FindForm.FindInCurrentDir(dir+:\);
end;
end;
Procedure WhereFind;
//Интерфейсная часть
Var
i:integer;
begin
if FindForm.RBCurDir.Checked then
begin
FindForm.LCurDir.Caption:=MainForm.Directory.Directory;
end;
if FindForm.RBCurDrive.Checked then
begin
FindForm.LCurDir.Caption:=UpperCase(MainForm.Directory.Drive)+:\;
end;
if FindForm.RBAllDrives.Checked then
begin
FindForm.LCurDir.Caption:=;
for i:=1 to MainForm.DrBox.Items.Count-1 do
begin
FindForm.LCurDir.Caption:=FindForm.LCurDir.Caption+UpperCase(MainForm.DrBox.Items.Strings[i][1])+:\
end;
end;
end;
Procedure InitFileMask;
//Проверка маски поиска для дальнейшего занесения в список масок
Var
i:integer;
tempStr:string;
begin
tempStr:=FindForm.CBFindMask.Text;
FindForm.CBFindMask.Clear;
for i:=1 to 10 do
begin
if FileMaskToFind[i]<> then
FindForm.CBFindMask.Items.Add(FileMaskToFind[i]);
end;
FindForm.CBFindMask.Text:=tempStr;
end;
Procedure ZdvigMask(s:string);
// Формирование списка масок поиска для хранения
Var
i:integer;
tmp:boolean;
begin
*.*then"> if FindForm.CBFindMask.Text<>*.* then
begin
for i:=10 downto 0 do
FindForm.CBFindMask.Textthen"> if FindForm.CBFindMask.Items[i]<>FindForm.CBFindMask.Text then
tmp:=true
else
begin
tmp:=False;
break;
end;
if tmp then
for i:=10 downto 2 do
begin
FileMaskToFind[i]:=FileMaskToFind[i-1];
end;
FileMaskToFind[1]:=s;
end;
end;
procedure TFindForm.FormActivate(Sender: TObject);
//Установка начальных значений для виз. компонент формы поиска
begin
Timer1.Enabled:=True;
InitFileMask;
DateIsBefore.Date:=Date;
DateIsAfter.Date:=Date;
CBFindMask.Text:=*.*;
CBCase.Checked:=False;
RBCUrDir.Checked:=True;
LCurDir.Caption:=MainForm.Directory.Directory;
SGreater.Text:=;
SLess.Text:=;
CBAdvSearch.Checked:=False;
FileWasFind.Clear;
FindForm.StatusFind.Panels[0].Text:=0;
FindForm.ActiveControl:=CBFindMask;
end;
procedure TFindForm.BitBtn1Click(Sender: TObject);
//Начать поиск файлов
begin
ZdvigMask(CBFindMask.Text);
FindForm.FileWasFind.Clear;
FindForm.StatusFind.Panels[0].Text:=0;
FindForm.FileWasFind.Sorted:=False;