PDA

View Full Version : سوال: مشكل در جست و جو چند نوع فايل به صورت هم‌زمان



روح اله معینی زاده
دوشنبه 22 مهر 1387, 17:28 عصر
با سلام خدمت دوستان
همان گونه كه مستحضريد با تابع GetFile مربوط به شيء Directory مي توان فايل‌هاي درون يك شاخه را به دست آورد، هم‌چنين در قسمت پارامتر دوم اين تابع مي توان نوعي فيلتر تعيين كرد تا فقط فايل‌هاي خاصي را در شاخه مورد نظر به دست آورد.
مثال زير فقط فايل‌هايي را بر مي گرداند كه پسوند آن‌ها exe است


... .GetFile(path, "*.exe")

در اين مثال نيز فرض بر اين است كه path حاوي يك مسير صحيح است.

سوال:
حال اگر بخواهيم در جست و جو به دنبال فايل‌هاي exe، com و ... بگرديم، بايد چه كار كنيم؟ يا به عبارتي قسمت فيلتر را بايد چگونه تنظيم نماييم؟

با احترام- خدانگه‌دار

mostafaaa
دوشنبه 22 مهر 1387, 18:27 عصر
سلام
فکر نمیکنم قسمت فیلتر قابلیت اینکه ترکیبی از Pattern ها رو بگیره داشته باشه. ولی با کد زیر میتونی مشکلت رو رفع کنی.

Dim PatternList As New List(Of String)
PatternList.Add("*.EXE")
PatternList.Add("*.TXT")
For Each Pattern As String In PatternList
For Each File As String In IO.Directory.GetFiles("C:\", Pattern)
Me.ListBox1.Items.Add(File)
Next
Next

پر واضحه که این کد یه نمونه ابتدایی که به ذهن من رسیده ، شما میتونی کاملش کنی و حتی به صورت یه متد یا کلاس درش بیاری.

روح اله معینی زاده
سه شنبه 23 مهر 1387, 07:42 صبح
سلام مجدد
از زحمتي كه كشيده‌ايد و پاسخ داده‌ايد تشكر مي كنم.

اما من فكر مي كردم مي توانم مانند ديالوگ باكس‌ها تعيين كنم كه چه پسوندهايي را نشان بدهد. مثلاً مانند نرم افزار ورد كه كلي پسوند را فيلتر مي كند و شما نمي توانيد چيزي غير از آن فايل‌ها را نمايش بدهيد.

البته من نمي خواهم يك چنين چيزي بسازم اما مي خواهم در پس زمينه كار سيستم، چنين كاري اتفاق بيفتد كه البته حدود 5 تا 12 پسوند را هم قرار است فيلتر كند و به مابقي فايل‌ها كاري نداشته باشد، بنابراين با توجه به مثالي كه شما فرموده‌ايد و اگر در شاخه‌ي ما حدود 300 يا 400 فايل وجود داشته باشد (چون هر روز در سيستم لاگ ايجاد مي شود و فايل‌ها هر روز زياد مي شود) سرعت سيستم كند خواهد شد.

با تشكر از زحمات شما
خدانگه‌دار

mostafaaa
سه شنبه 23 مهر 1387, 09:26 صبح
سلام دوست من ، منم مثل شما فکر میکردم. ولی فکر نمیکنم امکانپذیر باشه. من که چیزی پیدا نکردم .
اگه شما راه حل بهتری پیدا کردی. به ما هم خبر بده .
موفق باشید.

mostafaaa
سه شنبه 23 مهر 1387, 10:07 صبح
دوباره سلام
خودم یه راه حل بهتر پیدا کردم.

Dim PatternList() As String = {"*.exe", "*.txt", "*.vb"}
Dim Files As Collections.ObjectModel.ReadOnlyCollection(Of String) = _
My.Computer.FileSystem.GetFiles("c:\", FileIO.SearchOption.SearchTopLevelOnly, PatternList)
For Each item As String In Files
Me.ListBox1.Items.Add(item)
Next