كيفية البحث
#1
انا اصمم مضاد فيروس (بسيط جدا) حيث لا يمكنه جذف الفيروست التي يكون مسارها مجهولا )مثل new folder


لذا, ابحث طريقة ,للبحث ,في جميع ملفات الموجودة في جهازي و الجهاز المصاب
الرد
#2
اولا السلام عليكم .
ثانيا على ماذا تعتمد في بحثك هل :
على اسماء الملفات ؟
على بصمات ؟
على Md5 Hash ؟
هل بحثك على الملفات سيكون Static او Dynamic ؟
الرد
#3
اعتمد في بحثي عن الاسم
الرد
#4

يمكن ان تستخدم دوال دلفي FindFirst/ FindNext
راجع Help دلفي لكيفية الاستعمال + مثال

يمكن ايضا ان تستخدم دوال WIN32 API وهو FindFirstFile / FindNextFile
نفس الملاحظة راجع Help

يمكن ان تستخدم مكون ما مثل FindFile المجاني
http://www.delphiarea.com/products/delph.../findfile/

والسلام عليكم
الرد
#5
B.M.AbdelAziZ كتب :
يمكن ان تستخدم مكون ما مثل FindFile المجاني
http://www.delphiarea.com/products/delph.../findfile/

في البداية السلام عليكم


تم اصدار تحديث جديد له 4.10
التحميل من هنا:
كود :
http://www.delphiarea.com/?dl_id=8

و السلام عليكم
الرد
#6
السلام عليكم و رحمة الله وبركاته

اخي houssin انا معك انا توصلت الى حل لكنه غير كافي

ليكون الحل صحيح 100/100 يجب ان القى اجابة عن هدا السؤال :

[COLOR="Red"]كيف نفرق بين المجلد والملف في الدلفي ؟
كيف نعرف هدا مجلد وهدا ملف ؟
[/COLOR]
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#7
هدا مثال عن عملية التفريق بين الملف والمجلد موجود في المرفق

لقد اعتمدت على خاصية النقطة

خاصية النقطة هي الخاصية التي تتميز بها الملفات فنجد اسم الملف يحتوي على نقطة في اغلب الحلات مثلا text.txt
و المجلدات في اغلب الحلات لا تحتوي على النقطة

ولكن عندما يكون اسم المجلد مثلا new.1 في هده الحالة تفشل هده الخاصية ويضن البرنامج ان المجلد هو عبارة على ملف فيصنفه في خانت الملفات
وعندما اجد الجواب عن هدا السؤال :
كيف نفرق بين المجلد والملف في الدلفي ؟
نستطيع الدخول الى المجلدات والبحت داخله وهكدا دوليك ....


الملفات المرفقة
.rar   search.rar (الحجم : 4.61 ك ب / التحميلات : 76)
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#8
[COLOR="black"]لاستحضار قائمة المجلدات الفرعية من مجلد رئيسي:
PHP كود :
function Dir_CountDir(strPathName: String;bRecurseDir : Boolean):Integer;
    var
        
strTempPath : string;
        
nCount : integer;
        
hFindFile : THandle;
        
FindData : TWin32FindData;
    
Begin
        nCount 
:= 0;
        
Result := 0;
        
strTempPath := strPathName+'\*.*';
        
hFindFile := Windows.FindFirstFile(PChar(strTempPath),FindData);
        if 
hFindFile = INVALID_HANDLE_VALUE then Exit;
        
repeat
            
if (IsChildDir(FindData)) then
            begin
                nCount 
:= nCount+1;
                if 
bRecurseDir then
                begin
                    strTempPath 
:= strPathName+'\'+FindData.cFileName;
                    nCount := nCount+Dir_CountDir(strTempPath,bRecurseDir);
                end;
            end;
        until (not Windows.FindNextFile(hFindFile,FindData));
        Windows.FindClose(hFindFile);
        Result := nCount;
    end;

    function IsChildDir (var lpFindData : TWin32FindData) : Boolean;
    var
        b : boolean;
    begin
        Result := ((lpFindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <>0);
        b := (lpFindData.cFileName[0] <> '
.');
        Result := (Result and b);
    end; 
مثال البحث عن الملفات:
PHP كود :
procedure FindFiles(FilesList: TStringList; StartDir, FileMask: string);
var
   
SR: TSearchRec;
   
DirList: TStringList;
   
IsFound: Boolean;
   
i: integer;
begin
     
if StartDir[length(StartDir)] <> '\' then StartDir := StartDir + '\';

     // Build a list of the files in directory StartDir

     IsFound := FindFirst(StartDir + FileMask, faAnyFile-faDirectory, SR) = 0;
     while IsFound do
     begin
          FilesList.Add(StartDir + SR.Name);
          IsFound := FindNext(SR) = 0;
     end;
     FindClose(SR);

     // Build a list of subdirectories
     DirList := TStringList.Create;
     IsFound := FindFirst(StartDir+'
*.*', faAnyFile, SR) = 0;
     while IsFound do
     begin
          if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '
.') then
             DirList.Add(StartDir + SR.Name);
          IsFound := FindNext(SR) = 0;
     end;
     FindClose(SR);

     // Scan the list of subdirectories
     for i := 0 to DirList.Count - 1 do
         FindFiles(FilesList, DirList[i], FileMask);

         DirList.Free;
end;

(* -----------------
   Example:
----------------- *)

procedure TForm1.ButtonFindClick(Sender: TObject);
var
   FilesList: TStringList;
begin
     FilesList := TStringList.Create;
     try
        FindFiles(FilesList, EditStartDir.Text, EditFileMask.Text);
        ListBox1.Items.Assign(FilesList);
        LabelCount.Caption := '
Files found: ' + IntToStr(FilesList.Count);
     finally
            FilesList.Free;
     end;
end; 
بالتوفيق.[/COLOR]
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#9
استعمل هذا اذا اردت ان تعرف هل هذا مجلد :

كود :
function IsDirectory( sr : TSearchRec ) : boolean; begin isDirectory := ((sr.Attr and faDirectory > 0) and (sr.Name <> '.') and (sr.Name <> '..')); end;

والله المستعان
الرد
#10
بارك الله فيكم على المجهود

اخي kachwahed انا مبتدئ ولم استطع فهم تلك الدوال التي قدمتها

اخي mohfa مشكور هدا ماكنت ابحت عنه لكن لم افهم تلك الدالة ممكن تشرحها ليانني لا استعمل شئ لم افهمه

اشرح تلك الدالة لي انها مهمة جدا ولي كي يستفيد منها المبتدئين متلي

الان سوف اقوم بعمل البرنامج الدي يبحت عن ايي ملف في ايي قرص
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم