SORU
30 Mayıs 2009, CUMARTESİ


C ardışık bir liste dizindeki tüm dosyaları nasıl giderilir?

C ardışık listesi bir dizin ve alt dizinleri tüm dosyaları nasıl giderilir?

CEVAP
30 Mayıs 2009, CUMARTESİ


Not .(Sözde) yineleyici tabanlı vardır NET 4.0 (dizi tabanlı yerine) işlevleri yerleşik dosya:

    foreach (string file in Directory.EnumerateFiles(
        path, "*.*", SearchOption.AllDirectories))
    {
        Console.WriteLine(file);
    }

Şu anda ederdim kullanmak gibi bir şey aşağıda; dahili özyinelemeli yöntemi sonları çok çabuk yoksa erişmek için tek bir alt-dizin...; Queue<string> kullanımı engeller çok fazla çağrı yığını özyineleme ve yineleyici bloğu önler bizimle olması çok büyük bir dizi.

static void Main() {
    foreach (string file in GetFiles(SOME_PATH)) {
        Console.WriteLine(file);
    }
}

static IEnumerable<string> GetFiles(string path) {
    Queue<string> queue = new Queue<string>();
    queue.Enqueue(path);
    while (queue.Count > 0) {
        path = queue.Dequeue();
        try {
            foreach (string subDir in Directory.GetDirectories(path)) {
                queue.Enqueue(subDir);
            }
        }
        catch(Exception ex) {
            Console.Error.WriteLine(ex);
        }
        string[] files = null;
        try {
            files = Directory.GetFiles(path);
        }
        catch (Exception ex) {
            Console.Error.WriteLine(ex);
        }
        if (files != null) {
            for(int i = 0 ; i < files.Length ; i  ) {
                yield return files[i];
            }
        }
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matthew Morrill

    Matthew Morr

    15 EKİM 2011
  • Roger Huffman

    Roger Huffma

    4 ŞUBAT 2007
  • Top10Series

    Top10Series

    26 Kasım 2008