تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف يمكننا البحث عن ملف بمحتوى معين ضمن شجرة مجلدات
#1
كاتب الموضوع : samerselo

أنشئ مشروعا جديدا من النوع 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 أسفل النافذة كما يمكن إضافة صندوق نصوص آخر على النافذة لجعل مستخدم تطبيقنا يحدد لاحقة الملفات التي يريد البحث فيها
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  جمع قيم عمود معين فى datagridview الجندى 6 1,790 09-12-15, 04:40 PM
آخر رد: waled_life2002
  كيف يمكننا التأكد من تحرير موارد النظام التي يستخدمها كودنا RaggiTech 0 266 05-10-12, 01:46 AM
آخر رد: RaggiTech
  يمكننا استخدام فيجول بايزيك 2008 لإنشاء صفحات أشرطة إضافية لـ Excel 2007 RaggiTech 0 352 05-10-12, 01:14 AM
آخر رد: RaggiTech
  تشغيل برنامج خارجي أو فتح ملف مرتبط ببرنامج معين من ضمن كود فيجول بايزيك دوت نيت RaggiTech 1 3,360 03-10-12, 08:46 AM
آخر رد: RaggiTech
  تشغيل اكواد خاصة بحدث معين من داخل حدث اخر RaggiTech 0 250 03-10-12, 08:35 AM
آخر رد: RaggiTech
  تحويل الحروف العريية الى الأنجليزية والعكس (تطبيق خدمة جوجل لتدقيق كلمات البحث) RaggiTech 0 461 03-10-12, 07:57 AM
آخر رد: RaggiTech
  الفرق بين الدالة BinarySearch و الدالة IndexOf في البحث داخل المصفوفات Arrays RaggiTech 0 604 02-10-12, 08:02 PM
آخر رد: RaggiTech
  البحث ضمن html باستخدام linq RaggiTech 0 371 02-10-12, 09:47 AM
آخر رد: RaggiTech
  البحث حسب شهر معين باستخدام query builder RaggiTech 0 542 02-10-12, 09:46 AM
آخر رد: RaggiTech

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


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