
نوشته شده توسط
qasemf
ببینید چون بحث سرعت هم مطرح هست من اومدم به این روش عمل کردم و از parallel استفاده کردم واسه همین الان این شرطی که شما گفتین رو نمیتونم پیادش کنم
private void WalkDirectoryTree(DirectoryInfo dr, string searchname)
{
System.IO.FileInfo[] files = null;
System.IO.DirectoryInfo[] subDirs = null;
try
{
files = dr.GetFiles(searchname + ".*");
if (files != null)
{
if (InvokeRequired)
{
Invoke((MethodInvoker)delegate () {
foreach (FileInfo fi in dr.GetFiles(searchname + ".*")
.Where(f => !f.Attributes.HasFlag(FileAttributes.System))
.Where(s => !s.Attributes.HasFlag(FileAttributes.Hidden)))
{
flowLayoutPanel2.Controls.Clear();
listview_Control.Filelist.Items.Add(fi.Name);
flowLayoutPanel2.Controls.Add(listview_Control);
// allFiles.Add(fi);
}
});
}
subDirs = dr.GetDirectories();
Parallel.ForEach(subDirs, dwr => WalkDirectoryTree(dwr, searchname)
);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
شما شرط رو روی فایل گذاشتید، باید روی دایرکتوری قرار بدید
var subDirs = dr.GetDirectories()
.Where(f => !f.Attributes.HasFlag(FileAttributes.System))
.Where(s => !s.Attributes.HasFlag(FileAttributes.Hidden));