Sadece bugün aynı sorunla karşılaştım. Aşağıdaki kodu bir araya getirdim. Bunu gerçek bir üründe kullanmak istiyorsanız, hata işlemeyi iyileştirmeniz gerekebilir. Bu tek vuruşlu bir senaryo için olduğundan fazla umursamadı.
static IEnumerable<string> EnumerateFilesRecursive(string root,string pattern="*")
{
var todo = new Queue<string>();
todo.Enqueue(root);
while (todo.Count > 0)
{
string dir = todo.Dequeue();
string[] subdirs = new string[0];
string[] files = new string[0];
try
{
subdirs = Directory.GetDirectories(dir);
files = Directory.GetFiles(dir, pattern);
}
catch (IOException)
{
}
catch (System.UnauthorizedAccessException)
{
}
foreach (string subdir in subdirs)
{
todo.Enqueue(subdir);
}
foreach (string filename in files)
{
yield return filename;
}
}
}
şunlardan birini yapabilirsiniz Kullanmak için:
Lütfen tüm dosyaları, mağaza tüm dosya bellekte isimleri ve ancak o zaman görüntüler sıralar
string[] files = EnumerateFilesRecursive(@"C:\").ToArray();//Note the ToArray()
foreach (string file in files)
{
Console.WriteLine(file);
}
. Alternatif şunları yapabilirsiniz:
numaralandırma ve böylece aynı anda bellekte tüm dosya adlarını tutmak gerekmez iken yazıyor
IEnumerable<string> files = EnumerateFilesRecursive(@"C:\");//Note that there is NO ToArray()
foreach (string file in files)
{
Console.WriteLine(file);
}
.
Bu harika, kodunuzu paylaştığınız için çok teşekkürler. Bununla çalışmayı nasıl başaramayacağım, C# ile çok tecrübeli değilim. Ben dize kök ve dize desen args ama şans, ben Console.WriteLine() ile konsol için çıktı isteyip istemediğinizi varsayarak bir yöntem olarak çağırmayı denedim? Teşekkürler! –
Keşke sana +100 verebilirim! Bu mükemmel çalıştı, çok teşekkür ederim! –