![]() |
|
استعمال FindFirst للبحث في جميع المجلدات - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : استعمال FindFirst للبحث في جميع المجلدات (/showthread.php?tid=5577) |
استعمال FindFirst للبحث في جميع المجلدات - noor - 21-09-2013 السلام عليكم احاول صنع برنامج بحث حيث عندما اكتب اسم معين يقوم البرنامج بلبحث عنه بداخل الجهاز كله من ضمنه الفلاش ميموري اذا كان مربوط وجدت بعض الاكواد هذا للبحث كود : procedure TForm1.Button1Click(Sender: TObject);
function SearchForFile( aDir: string; aFileName: string ): string;
var
tmpSearchRec: TSearchRec;
begin
Label1.Caption := 'Searching: ' + aDir;
Label1.Repaint;
Result := '';
if FindFirst( aDir + '*', faDirectory, tmpSearchRec ) = 0 then
repeat
if faDirectory = tmpSearchRec.Attr then
begin
if ( tmpSearchRec.name <> '.' ) and ( tmpSearchRec.name <> '..' ) then
Result := SearchForFile( aDir + tmpSearchRec.name + '\', aFileName )
end
else
if SameText( ExtractFileName( tmpSearchRec.Name ), aFileName ) then
Result := aDir + tmpSearchRec.Name;
until ( FindNext( tmpSearchRec ) <> 0 ) or ( Result <> '' );
FindClose( tmpSearchRec );
end;
begin
ShowMessage( SearchForFile( 'c:\', 'calc.exe' ));
end;استعملته وقد نجح الامر معي لاكن المشكله لايبحث اله بلمجلد C:\ هل من طريقه او كود يبحث داخل الجهاز بلكامل ومن ضمنه الفلاش ميموري استعمال FindFirst للبحث في جميع المجلدات - S.FATEH - 13-11-2013 السلام عليكم يبحث في الـ c لانك امرته ان يبحث فقط في السي كود : ShowMessage( SearchForFile( 'c:\', 'calc.exe' ));الكود غير مجرب كود : procedure TForm1.Button1Click(Sender: TObject);
var
List: TStringList;
I: Integer;
begin
List := TStringList.Create;
try
for i := 0 to List.Count - 1 do
ShowMessage(SearchForFile(List[i], 'calc.exe' ));
finally
List.Free;
end;
end;
procedure GetDriveLetters(AList: TStrings);
var
vDrivesSize: Cardinal;
vDrives : array[0..128] of Char;
vDrive : PChar;
begin
AList.BeginUpdate;
try
// clear the list from possible leftover from prior operations
AList.Clear;
vDrivesSize := GetLogicalDriveStrings(SizeOf(vDrives), vDrives);
if vDrivesSize=0 then Exit; // no drive found, no further processing needed
vDrive := vDrives;
while vDrive^ <> #0 do
begin
AList.Add(StrPas(vDrive));
Inc(vDrive, SizeOf(vDrive));
end;
finally
AList.EndUpdate;
end;
end;استعمال FindFirst للبحث في جميع المجلدات - Houdini - 14-11-2013 كود : يقوم البرنامج بلبحث عنه بداخل الجهاز كلهمثلا لو حدد القرص c سيتم البحث ايضاا في مجلدات windows - programmes - user - ...... لو كان دا طلبك فانت بحاجة لعمل اشبه بالخوازمية و قد عملت مرة واحد تشبهها لاكن بلغة اوتوايت ودا كان حالي لها 1- نقوم بعمل مصفوفة array غير محددة طول فسنحدد طوله برمجياا 2 - نضع مجلد الـ root مثلا c في اول المصفوفة 3 - الخوازمية تبدا بالبحث في هته المصفوفة من اول عنصر الي هو الـ root 4 - عند ايجادها لمجلدات تقوم بتحديث المصفوفة و وضع المجلدات الجديدة فيها ادا الخوازمية عند انتهائها من بحث في root تكون قد وضعت اسماء مجلدات الفرعية بعدها فتبدا البحث فيها و عند ايجاد مجلدات فرعية داخل مجلدات الفرعية الاولى تقوم بتحديث المصفوفة و وضع المجلدات الجديدة فيها و هكدا دواليك الامر اشبه ب linked list اتمنى وصلت فكرة البحث داخل مجلدات الفرعية و اعتقد هنالك مصادر مفتوحة تهتم بالامر find in sub folder استعمال FindFirst للبحث في جميع المجلدات - S.FATEH - 14-11-2013 السلام عليكم عفوا لم افهم السآل جيدا شكرا اخ هوديني ان كان الامر كذلك فالامر سهل و ذلك عن طريق استخدام الـ recursive function تقوم باستدعاء الدالة في النهاية مع تمرير المجلد الجديد في النهاية المثال مأخوذ من كتاب delphi 6 devlopers guide صفحة 222 عدل على المثال بما يناسبك اعتقد نفس القسم موجود في هذا الكتاب http://delphi4arab.net/forum/showthread.php?tid=441&highlight=delphi+guide PHP كود : procedure TSearchThread.FindAllFiles(const Path: string); |