PDA

View Full Version : سوال: بدست آوردن لیستی از فایلهای زیر شاخه بدون استفاده از TSearchRec؟



mbshareat
جمعه 12 اردیبهشت 1399, 16:51 عصر
سلام
من یک کد دارم که با اون نوعی از فایل (با پسوند t ) رو در یک آرایه میریزم.
متاسفانه ویروس یاب بارها به این کد گیر داده و فایل اجرایی رو خودکار حذف کرده.(جالبه معمولا گیر نمیده)
زیاد تعجب نکنید حتی دیدم به اسم متغیر هم گیر داده اسم متغیر رو عوض کردم برنامه اجرا شده.:گیج:

var
Files:Array[1..32000] of String;
FilesNo:Word=0;
Procedure GetFiles(const sRootDir:string);
procedure Get_T_Files(const sRootDir:string);
var
srSearch: TSearchRec;
sSearchPath: string;
sltSub: TStrings;
i: Integer;
begin
sltSub := TStringList.Create;
try
sSearchPath := IncludeTrailingBackslash(sRootDir);
if FindFirst(sSearchPath + '*', faDirectory, srSearch) = 0 then
repeat
if (srSearch.Name <> '.') and
(srSearch.Name <> '..') then
begin
if ((srSearch.Attr and faDirectory) =0)
and (LowerCase(ExtractFileExt(srSearch.Name))='.t') then
Begin
Inc(FilesNo);
Files[FilesNo]:=sSearchPath + srSearch.Name;
End;
sltSub.Add(sSearchPath + srSearch.Name);
end;
until (FindNext(srSearch) <> 0);


FindClose(srSearch);


for i := 0 to sltSub.Count - 1 do
Get_T_Files(sltSub.Strings[i]);
finally
FreeAndNil(sltSub);
end;
end;
Begin
FilesNo:=0;
Get_T_Files(sRootDir);
End;



Files,FilesNo متغیر عمومی هستند چون در قسمتهای مختلف برنامه ازشون استفاده می کنم.
من فکر می کنم چون از TSearchRec استفاده می کنم یا میخوامک خصوصیات فایل رو بخونم ویروس فرض می کنه.
کسی کدی دیگه ای سراغ نداره که فایلهای با پسوند خاص رو در زیر شاخه ها بتونم لیست بگیرم.
من فقط کد بالا رو تو اینترنت پیدا می کنم(و معمولا زیر شاخه رو هم نمیگرده)

mbshareat
جمعه 12 اردیبهشت 1399, 17:44 عصر
هنوز کد سر راست میخوام اما اگر کدی نبود... این کد رو نوشتم که از لیست دایرکتوری و فایل استفاه می کنه.امیدوارم همه فایلها رو لیست کنه. لطفا بزرگان یه نگاه بندازند ببنند عیب نداره؟
var
Files:Array[1..32000] of String;
FilesNo:Word=0;
...
Procedure TForm1.GetFiles2(const RootDir:string);
procedure Get_T_Files(const TheDir:string);
var
SubDirSt: TStrings;
i: Integer;
begin
SubDirSt := TStringList.Create;
try
DirectoryListBox1.Directory := TheDir;
FileListBox1.Directory := TheDir;
For I:=0 to FileListBox1.Count-1 Do
Begin
Inc(FilesNo);
Files[FilesNo]:=IncludeTrailingBackslash(TheDir)+ FileListBox1.Items[I];
End;
If DirectoryListBox1.Count>(DirectoryListBox1.ItemIndex+1) then
Begin
For I:= DirectoryListBox1.ItemIndex+1 To DirectoryListBox1.Count-1 Do
SubDirSt.add(IncludeTrailingBackslash(TheDir)+Dire ctoryListBox1.Items[I]);
for i := 0 to SubDirSt.Count - 1 do
Get_T_Files(SubDirSt.Strings[i]);
End;
finally
FreeAndNil(SubDirSt);
end;
end;
Begin
FilesNo:=0;
FileListBox1.Mask:='*.t';
Get_T_Files(RootDir);
End;