05-10-12, 01:47 AM
كاتب الموضوع : 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
كود :
' إعادة قائمة بالملفات ضمن شجرة مجلدات معينة
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
كود :
' قراءة محتويات الملف
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
فكرة لتطوير المشروع ولكن لن أنفذها أنا وأنتظر من أحد متابعي موضوعي تنفيذها وهي أنه إذا كانت شجرة المجلدات المبحوث فيها كبيرة فالبحث سيأخذ وقتا طويلا لذا يجب نقل تنفيذ الاستعلام إلى مسار آخر Another Thread وإظهار مؤشر بتقدم العملية باستخدام ProgressBar أسفل النافذة كما يمكن إضافة صندوق نصوص آخر على النافذة لجعل مستخدم تطبيقنا يحدد لاحقة الملفات التي يريد البحث فيها