الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكننا البحث عن ملف بمحتوى معين ضمن شجرة مجلدات

بدأه محمد سامر أبو سلو في 15 أبريل 2009 · 3 رد · 930 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أنشئ مشروعا جديدا من النوع Windows Forms Application وضع على النافذة TextBox عدد 2 و Button عدد 2 و ListBox عدد 1 وإن أحببت المتابعة بتسمياتي قم بتسمية التحكمات السابقة كما يلي txtPath و txtContents و btnSelectFolder و btnSearch و lstResults

الآن أنشئ معالج لحدث النقر على كلا الزرين واجعل كود زر اختيار المجلد كما يلي

Private Sub btnSelectFolder_Click() Handles btnSelectFolder.Click
	' اختيار المجلد
	Dim sf As New FolderBrowserDialog
	If sf.ShowDialog = Windows.Forms.DialogResult.OK Then
		Me.txtPath.Text = sf.SelectedPath
	End If
End Sub

من أجل الاستعلام عن الملفات المطلوبة سنحتاج إلى وظيفة تعيد لنا قائمة بالملفات الموجودة في شجرة مجلدات معينة حيث سنقوم بتمرير مسار المجلد الذي سنبدأ منه كمحدد وحيد لها وسيكون كودها على الشكل التالي حيث استخدمنا استعلام لينك يعيد لنا مجموعة من النوع FileInfo لقائمة الملفات الموجودة في شجرة المجلدات الممررة مستخدما الدالة GetFiles للحصول على قائمة الملفات المطلوبة

' إعادة قائمة بالملفات ضمن شجرة مجلدات معينة
Function GetFiles(ByVal root As String) As  _
		 System.Collections.Generic.IEnumerable(Of System.IO.FileInfo)

	Return From file In My.Computer.FileSystem.GetFiles _
			   (root, FileIO.SearchOption.SearchAllSubDirectories, "*.*") _
			   Select New System.IO.FileInfo(file)
End Function

وسنحتاج وظيفة أخرى تعيد لنا محتويات الملف الذي نقرأه عند الاستعلام حيث نمرر لها مسار ذلك الملف وسيكون كود هذه الوظيفة على الشكل التالي حيث استخدمنا الدالة ReadAllText لقراءة كافة محتويات الملف وإعادتها

' قراءة محتويات الملف
Function GetFileText(ByVal FileName As String) As String
	' إن كان الملف موجودا أعد محتوياته وإلا أعد نصا فارغا
	If System.IO.File.Exists(FileName) Then
		Return System.IO.File.ReadAllText(FileName)
	Else
		Return String.Empty
	End If
End Function

وسيكون كود زر البحث كالتالي

Private Sub btnSearch_Click() Handles btnSearch.Click
	' التأكد من المسار وشرط البحث قبل المتابعة
	If Me.txtPath.Text <> String.Empty _
	   And Directory.Exists(Me.txtPath.Text) _
	   And Me.txtContents.Text <> String.Empty Then
		' الحصول على قائمة بالملفات
		Dim fileList = GetFiles(Me.txtPath.Text)

		' استخدام استعلام لينك للحصول على قائمة بالملفات التي تطابق شرط البحث
		Dim queryMatchingFiles = From file In fileList _
					 Where file.Extension = ".htm" _
					 Let fileText = GetFileText(file.FullName) _
					 Where fileText.ToUpper.Contains(Me.txtContents.Text.ToUpper) _
					 Select file.FullName

		' إظهار النتائج في صندوق القائمة
		Me.lstResults.Items.Clear()
		Me.lstResults.Items.AddRange(queryMatchingFiles.ToArray)

	End If

	MsgBox("Done.")
End Sub

حيث استخدمنا في البداية عبارة If للتحقق من نص البحث والمسار المطلوب قبل تنفيذ عملية البحث ثم قمنا بالحصول على قائمة الملفات ووضعها في المتغير fileList ثم استخدمنا استعلام لينك يستعلم من fileList وفي قسم Where حددنا أننا نريد البحث في الملفات التي تمتلك اللاحقة htm ثم أضفنا شرطا آخر لقسم Where بأننا نريد الحصول على الملفات التي تحتوي نصا معينا فقط وقمنا باستخدام الدالة ToUpper مع كلا النصين من أجل تجاهل حالة النص (حروف كبيرة أو صغيرة) ثم قمنا بإظهار نتائج الاستعلام في صندوق القائمة

فكرة لتطوير المشروع ولكن لن أنفذها أنا وأنتظر من أحد متابعي موضوعي تنفيذها وهي أنه إذا كانت شجرة المجلدات المبحوث فيها كبيرة فالبحث سيأخذ وقتا طويلا لذا يجب نقل تنفيذ الاستعلام إلى مسار آخر Another Thread وإظهار مؤشر بتقدم العملية باستخدام ProgressBar أسفل النافذة كما يمكن إضافة صندوق نصوص آخر على النافذة لجعل مستخدم تطبيقنا يحدد لاحقة الملفات التي يريد البحث فيها

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#2

ليجعله الله في ميزان حسناتك,

مشكور

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#3

بارك الله فيك اخي

لكن لماذا لا تظهر النتائج في listbox

ارجو المساعدة

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

#4

أولا - يجب أن تعمل على الإصدار 2008 وليس أي إصدار يسبقه

ثانيا - تنفيذ المشروع موضح بشكل جيد خطوة خطوة وإن لم يكن لديك خلفية حول استعلامات Linq لينك ابحث في المنتدى عن مواضيعي المتعلقة بهذه الاستعلامات - فأنا لن أقوم بشرح هذه الاستعلامات هنا بما أنني طرحت مواضيعا شرحت فيها هذه الاستعلامات

ثالثا - تاكد من انك أدخلت شروط بحث موافقة للملفات في جهازك ( مسار البحث والمحتوى) والكود مجرب وشغال 1000% قبل طرح الموضوع في المنتدى

رابعا - تأكد من أنك قد قمت بإدخال الكود لديك بالضبط كما هو ظاهر هنا - ربما قد تكون قد أخطأت في نقطة ما

وإن ما زلت تواجه مشكلة يرجى ارفاق مشروعك حتى أرى أين المشكلة لديك

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 17 أبريل 2009 في 12:06

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…