delphi4arab منتديات دلفي للعرب
كيف البحث عن ملف في حالة عدم وجوده بالمسار - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : كيف البحث عن ملف في حالة عدم وجوده بالمسار (/showthread.php?tid=6850)

الصفحات: 1 2


كيف البحث عن ملف في حالة عدم وجوده بالمسار - السوفي - 06-03-2015

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

كيف معرفة مسار ملف محدد آليا بحيث يقوم البرنامج بالبحث عن الملف في حالة وجوده يظهره والا يظهر رسالة يخبرك انه مفقود
وقد جربت استخدام هذه الدوال لكن لم تادي المرغوب فيه
كود :
[align=left]var fullFileName : string; begin fullFileName := 'C:\Program Files\Unit1.dcu'; ShowMessage('Drive = '+ExtractFileDrive (fullFileName)); ShowMessage('Dir = '+ExtractFileDir (fullFileName)); ShowMessage('Path = '+ExtractFilePath (fullFileName)); ShowMessage('Name = '+ExtractFileName (fullFileName)); ShowMessage('Ext = '+ExtractFileExt (fullFileName));[/align]
هذة الدوال لازم تعطيها المسار ولا تقوم بالبحث
شكرا مقدما



كيف البحث عن ملف في حالة عدم وجوده بالمسار - onexite - 06-03-2015

PHP كود :
if FileExists(fileName)
  
then ShowMessage(fileName+' exists OK') 



كيف البحث عن ملف في حالة عدم وجوده بالمسار - السوفي - 06-03-2015

اخي الفاضل حياك الله واثابك بحسن الجزاء

لم افهمك ولم استوعب اجابتك فخذني على قدري ولو بتفصيل بسيط واسف على ازعاجكم مسبقا

FileExists هذه الدالة لا تمكننا من البحث بل هي تاكد من الملف موجود ام لا، دالة تقوم بالبحث عن ملف ما فحين تجده تظهر مساره وان لم تجده تعود بفشل

شكرا على تعاونك اخي الفاضل
جزاك ربي بالغفران
السلام عليكم


كيف البحث عن ملف في حالة عدم وجوده بالمسار - مهند الرسيني - 06-03-2015

إذا سيتوجب عليك عمل حلقة تنتهي عندما تقوم بالتأكد من جميع الملفات التي في الهاردسك , ولا اضنها فكرة سديدة
فهي تأخذ وقتاً كثيراً , ساكتب لك مثال غداً إن شاء الله .


كيف البحث عن ملف في حالة عدم وجوده بالمسار - الكاسر الآخر - 06-03-2015

هذا أخي إجراء يقوم بالبحث عن ملف في مجلد معين مع إمكانية البحث داخل المجلدات الفرعية وهو يستخدم فكرة استدعاء الدالة لنفسها Recursif وتقوم بوضع مسار الملف في listbox

كود :
procedure TForm14.RecSearch(const sPathName, sFile : String; const subDir : Boolean); var sr : TSearchRec; sPath : String; begin Application.ProcessMessages; sPath:=IncludeTrailingBackslash(sPathName); if FindFirst(sPath + sFile, faAnyFile - faDirectory, sr) = 0 then repeat listBox1.Items.Add(sPath + sr.Name); // send files into a ListBox until FindNext(sr) <> 0; FindClose(sr); If not subDir then Exit; if FindFirst(sPath + '*.*', faDirectory, sr) = 0 then repeat if ((sr.Attr and faDirectory) <> 0) and (sr.Name<>'.') and (sr.Name<>'..') then RecSearch(sPath + sr.Name, sFile, True); until FindNext(sr) <> 0; FindClose(sr); end;

طريقة الاستدعاء
RecSearch('c:\windows','File.dll', true);


كيف البحث عن ملف في حالة عدم وجوده بالمسار - مهند الرسيني - 07-03-2015

السلام عليكم
قمت بتجربة بسيطة لدالة FindAllDirectories بهذا الشكل :
PHP كود :
Memo1.Lines.AddStrings(FindAllDirectories('/')); 
حيث سأقوم بهذه الطريقة بإستخراج جميع المسارات الموجودة في النظام لكي ابحث عن ملف, وقمت بذلك فقط لأرى كم الوقت الذي سيستغرق , النتائج كانت كما توقعت , أولاً يوجد إستنزاف للذاكرة حيث بلغ حجم البرنامح في الذاكرة قرابة 2 قيقاً xD والامر الآخر ان العملية تستنزف الـ CPU قرابة 25% , والأمر الآخير ان كل ذلك حصل قبل ان تنتهي الدالة من البحث فقمت بإغلاق البرنامح , طبعاً هذه العملية فقط لإخراج المسارات الممكن البحث بها , أي اننا لم نأتي للجزء الرئيسي وهو البحث عن الملف داخل تلك المسارات

لذلك إذا كنت تستطيع تحديد مسار معين يمكن ان يكون فيه الملف فهي أفضل وسيلة لستعمال هذه الدوال لتجنب كل تلك الأمور المذكورة سابقاً.
كمثال ربما يوجد الملف المراد البحث عنه في مسار FilePrograms او Desktop فيمكن استعمال تلك الدوال بطريقة افضل .

بالنسبة لمثال الأخ "الكاسر الأخير" فهي نفس العملية وكذلك لا انصحك بإستعمال Recursif لان الستاك سيكون ملئ فستحدث عدة مشاكل ..

ملاحظة : استعملت لازارس على لينكس .


كيف البحث عن ملف في حالة عدم وجوده بالمسار - محمد عبد العزيز - 07-03-2015

http://www.delphi4arab.net/forum/showthread.php?tid=1386
http://www.delphi4arab.net/forum/showthread.php?tid=2054


كيف البحث عن ملف في حالة عدم وجوده بالمسار - السوفي - 07-03-2015

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

شكرا اخوتي الافاضل فقد افدتموني كثيرا
وقد جربت وحدث ثقل للجهاز وتشنج لهذا طرحت السؤال لعلي اجد طريقة افضل مثل ما تستخدمه برامج الفخص او كما يفعله ويندوز نفسه حيث تكتب اسم الملف وهو يقوم بالبحث ولا ياخذ اجراء طويل يبدوا ان الامر معقد نوعا ما

شكرا ساعتمد عاى تحديد مسار معين لاضع فيه مجلد القاعدة واجعل البرنامج يتاكد من وجد القاعده ليشتغل والا يتوقف عن العمل
كما ساعتمد على نفس الفكره في وضع جداول التنقيط التي تسلم الاى الاساتذه لاقوم بسحب واستراد النقاط
شكرا وبارك الله فيكم جميعا
السلام عليكم


كيف البحث عن ملف في حالة عدم وجوده بالمسار - Agmcz - 08-03-2015

السلام عليكم
من طبيعي أن يحدث Freezing للفورم
يمكن تجنب هذا بتشغيل هذا الإجراء في Thread منفصل

أيضا أنا مستغرب :confused:
لماذا تبحث عن ملف بكامل الهارد. هل السبب وجود إسمه فقط؟
إذا كان مساره موجود تحقق من وجوده وإنتهى الأمر
إذا كان غير ذلك فوضح ماذا تريد بالضبط



كيف البحث عن ملف في حالة عدم وجوده بالمسار - مهند الرسيني - 08-03-2015

إقتباس : يمكن تجنب هذا بتشغيل هذا الإجراء في Thread منفصل
+1
إذا اردت محاكات ما تقوم به برامج الفحص و محرك البحث الخاص بيوندوز , استعمل Thread وقم بوضع أي نتيجه تحصل عليها في ListView
اي ان الثريد سيقوم بواضع اي نتيجه في القائمة حتى وهو لم يتنهي من البحث .

الثقل الذي يحصل لك امر طبيعي حتى انه يحصل مع برامج الفحص لكنها تستعمل Thread , وكما تعرف عندما تريد فحص كامل الجهاز ستستغرق العملية ساعات(حسب عدد الملفات)
فلتجنب التهنيق في برنامجك قم بستعمال Thread ليقوم بإظهار النتائج الخاصة به بشكل فوري في TListView .