C # 'da bir dizindeki tüm dosyaları özyinelemeli olarak nasıl listeleyebilirim?


315

C # dizin ve alt dizinleri tüm dosyaları özyinelemeli olarak nasıl listelenir?


1
Nerede doldurmak istersiniz? eğer ağaç ... işte örnek dreamincode.net/code/snippet2591.htm
Arsen Mkrtchyan

77
string [] dosyaisleri = Directory.GetFiles (yol, "*", SearchOption.AllDirectories)
Bruce

Bir TreeView bir dizin yapısı oluşturmak için özyineleme kullanan bir kod örneği sunduğum bu soruya bakmak isteyebilirsiniz . Mantık çoğu durumda aynı olmalıdır.
Cerebrus

5
Buradaki sorun, tek bir dizine erişiminiz yoksa çok kolay kırılmasıdır: sonuç yok ...
Marc Gravell

1
Bazı dosyalara erişilemediğinde sorun yaşarsanız, Dosyaları Atma İstisnası Numaralandırmasına
CodesInChaos

Yanıtlar:


186

Bu makale ihtiyacınız olan her şeyi kapsamaktadır. Dosyaları aramak ve adları karşılaştırmak dışında, sadece adları yazdırın.

Bu şekilde değiştirilebilir:

static void DirSearch(string sDir)
{
    try
    {
        foreach (string d in Directory.GetDirectories(sDir))
        {
            foreach (string f in Directory.GetFiles(d))
            {
                Console.WriteLine(f);
            }
            DirSearch(d);
        }
    }
    catch (System.Exception excpt)
    {
        Console.WriteLine(excpt.Message);
    }
}

Barlop tarafından eklendi

GONeale, yukarıdakilerin geçerli dizindeki dosyaları listelemediğinden bahseder ve dosya listeleme parçasını dizinleri alan parçanın dışına koymanızı önerir. Aşağıdakiler bunu yapardı. Ayrıca, özyinelemenin nasıl çalıştığını göstermeye yardımcı olmak için çağrıları göstermeye yardımcı olabilecek özyinelemede nerede olduğunuzu izlemeye yardımcı olan bir Yazma satırı içerir.

            DirSearch_ex3("c:\\aaa");
            static void DirSearch_ex3(string sDir)
            {
                //Console.WriteLine("DirSearch..(" + sDir + ")");
                try
                {
                    Console.WriteLine(sDir);

                    foreach (string f in Directory.GetFiles(sDir))
                    {
                        Console.WriteLine(f);
                    }

                    foreach (string d in Directory.GetDirectories(sDir))
                    {
                        DirSearch_ex3(d);
                    }
                }
                catch (System.Exception excpt)
                {
                    Console.WriteLine(excpt.Message);
                }
            }

86
Bu yöntem, başlangıç ​​dizini için dosyaları listelemez, yalnızca alt dizinler ve daha düşüktür. Ben GetFiles dışında GetDirectories hareket edeceğini
GONeale

1
Bazen ilk dizin için dosyalar istemez, bu durumda bu oldukça küçük yapılar için mükemmeldir. Çok büyük listeler için Marc Gravell'in çözümü gibi bir şey kullanın: stackoverflow.com/a/929418/91189
Joseph Gabriel

2
@GONeale doğru. Bir kullanıcının giriş kök dizininin dosya listelemesini beklememesi çok daha az mantıklıdır. Kelime girişi burada anahtardır. Bir sebepten dolayı girdi.
Florin Mircea

2
İç foreach döngüsü etrafında bir deneme yakalamak eklemek zorunda kaldı, aksi takdirde erişim reddedildi hataları devam etmez
Shaun Vermaak

3
İstisna yakalamaktan kaçınmalısınız - örneğin bir OutOfMemoryException'ı gerçekten yakalamak ister misiniz? Sadece halledebildiğin şeyi yakala.
alastairtree

435

.NET 4.0'da yerleşik (sözde) yineleyici tabanlı (dizi tabanlı değil) dosya işlevlerinin bulunduğunu unutmayın:

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

Şu anda aşağıdaki gibi bir şey kullanırdım; tek bir alt dizine erişiminiz yoksa dahili özyinelemeli yöntem çok kolay kırılır ...; Queue<string>kullanım çok fazla çağrı yığını özyinelemeye önler ve yineleyici blok bize büyük bir dizi sahip önler.

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];
            }
        }
    }
}

1
@soandos Özyinelemeli reparce noktasında EnumerateFiles "Dosyanın adı sistem tarafından çözülemiyor"
SerG

5
Dosya uzantısı olmayan*.* dosyalar da içerip içermediğini bilmek isteyenler için : Evet, bir dakika önce test edildi.
Tobias Knauss

1
Bunu kullanmak için eklemeniz gerekecekusing System.IO;
Reinstate Monica - Goodbye SE

7
@Wikis ve kullanmak Consoleiçin eklemeniz gerekecek using System;- ancak IDE sizin için gerekli tüm usingdirektifleri ekleyebildiğinden (ctrl +.) Ve burada egzotik bir şey kullanmadığımız için bunları dahil etmemek yaygındır. Heck, ayrıca bir tanıma ihtiyacınız olacak vb. Sadece söylüyorumclass
Marc Gravell

1
@MarcGravell Şu anda .net çekirdeği ve Visual Studio Code dünyasındayız, bu yüzden bir dizi aramayı ve anlamsız "yak tıraş" ı kaydetmek için ifadeleri kullanmak her örnek .net kodunda her zaman açığız
JohnC

98
Directory.GetFiles("C:\\", "*.*", SearchOption.AllDirectories)

2
Oturum açma kullanıcısının bazı klasörlerde erişimi yoksa hatayı önleme.
Romil Kumar Jain

5
@Romil Bu kod snippet'inin tam işlevsellik, yalnızca OP'nin aradığı ham işlevselliği göstermeye çalıştığına inanmıyorum. Paylaştığınız için teşekkürler, Pescuma!
kayleeFrye_onDeck

@kayleeFrye_onDeck, dosyaları alırken herhangi bir klasör için yükseltilmiş olması durumunda sadece bir endişe koydum. Bu endişeden dolayı özel özyinelemeli işlevimizi uyguluyoruz.
Romil Kumar Jain

3
Bu çözüm ile "UnauthorizedAccessException" alacaksınız. Bunun gibi hataları işleyebilecek bir çözümünüz olmalıdır.
Kairan

13

.NET 4.5'te, en azından, çok daha kısa olan ve listeye dahil edilmek üzere herhangi bir dosya ölçütünü değerlendirme bonusu olan bu sürüm var:

public static IEnumerable<string> GetAllFiles(string path, 
                                              Func<FileInfo, bool> checkFile = null)
{
    string mask = Path.GetFileName(path);
    if (string.IsNullOrEmpty(mask)) mask = "*.*";
    path = Path.GetDirectoryName(path);
    string[] files = Directory.GetFiles(path, mask, SearchOption.AllDirectories);

    foreach (string file in files)
    {
        if (checkFile == null || checkFile(new FileInfo(file)))
            yield return file;
    }
}

Bunun gibi kullanın:

var list = GetAllFiles(mask, (info) => Path.GetExtension(info.Name) == ".html").ToList();

Bu, boş bir dizininizin olduğu bir durumu ele almaz ... işlevin içinde herhangi bir return ifadesi yoktur.
FrumkinWY

@FrumkinWY boş bir dizinde ne olur? Bunu test etmek için kullanışlı bir makinem yok.
John Kaster

12
IEnumerable<string> GetFilesFromDir(string dir) =>
 Directory.EnumerateFiles(dir).Concat(
 Directory.EnumerateDirectories(dir)
          .SelectMany(subdir => GetFilesFromDir(subdir)));

3

Framework 2.0'da (Kök klasörünün dosyalarını listeler, en popüler cevaptır) kullanabilirsiniz:

static void DirSearch(string dir)
{
    try
    {
        foreach (string f in Directory.GetFiles(dir))
            Console.WriteLine(f);
        foreach (string d in Directory.GetDirectories(dir))
        {
            Console.WriteLine(d);
            DirSearch(d);
        }

    }
    catch (System.Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

3

Bazı mükemmel cevaplar ama bu cevaplar sorunumu çözmedi.

Bir klasör izin sorunu ortaya çıkar çıkmaz: "İzin Reddedildi" kodu başarısız olur. Ben "İzin Reddedildi" sorunu aşmak için kullanılan budur:

private int counter = 0;

    private string[] MyDirectories = Directory.GetDirectories("C:\\");

    private void ScanButton_Click(object sender, EventArgs e)
    {
        Thread MonitorSpeech = new Thread(() => ScanFiles());
        MonitorSpeech.Start();
    }

    private void ScanFiles()
    {
        string CurrentDirectory = string.Empty;

        while (counter < MyDirectories.Length)
        {
            try
            {
                GetDirectories();
                CurrentDirectory = MyDirectories[counter++];
            }
            catch
            {
                if (!this.IsDisposed)
                {
                    listBox1.Invoke((MethodInvoker)delegate { listBox1.Items.Add("Access Denied to : " + CurrentDirectory); });
                }
            }
        }
    }

    private void GetDirectories()
    {
        foreach (string directory in MyDirectories)
        {
            GetFiles(directory);
        }
    }

    private void GetFiles(string directory)
    {
        try
        {
            foreach (string file in Directory.GetFiles(directory, "*"))
            {
                listBox1.Invoke((MethodInvoker)delegate { listBox1.Items.Add(file); });
            }
        }
        catch
        {
            listBox1.Invoke((MethodInvoker)delegate { listBox1.Items.Add("Access Denied to : " + directory); });
        }
    }

Umarım bu başkalarına yardımcı olur.


3

Basit ve temiz bir çözüm

/// <summary>
/// Scans a folder and all of its subfolders recursively, and updates the List of files
/// </summary>
/// <param name="sFullPath">Full path of the folder</param>
/// <param name="files">The list, where the output is expected</param>
internal static void EnumerateFiles(string sFullPath, List<FileInfo> fileInfoList)
{
    try
    {
        DirectoryInfo di = new DirectoryInfo(sFullPath);
        FileInfo[] files = di.GetFiles();

        foreach (FileInfo file in files)
            fileInfoList.Add(file);

        //Scan recursively
        DirectoryInfo[] dirs = di.GetDirectories();
        if (dirs == null || dirs.Length < 1)
            return;
        foreach (DirectoryInfo dir in dirs)
            EnumerateFiles(dir.FullName, fileInfoList);

    }
    catch (Exception ex)
    {
        Logger.Write("Exception in Helper.EnumerateFiles", ex);
    }
}

3
DirectoryInfo.GetFiles () sizin için kutunun dışında ne yapacağını elle yapıyorsunuz - sadece aşırı yükü SearchOption.AllDirectories ile kullanın ve hepsi kendi başına geri çekilecektir. Bu karmaşık bir çözüm.
philw

2

Ben sadece dizeleri değil FileInfo's alabilirsiniz çünkü DirectoryInfo kullanmayı tercih ederim.

        string baseFolder = @"C:\temp";
        DirectoryInfo di = new DirectoryInfo(baseFolder);

        string searchPattern = "*.xml";

        ICollection<FileInfo> matchingFileInfos = di.GetFiles(searchPattern, SearchOption.AllDirectories)
            .Select(x => x)
            .ToList();

Gelecekte gelecekteki filtreleme gerekir .. Bunu FileInfo özelliklerine dayalı ben bunu.

        string baseFolder = @"C:\temp";
        DirectoryInfo di = new DirectoryInfo(baseFolder);

        string searchPattern = "*.xml";

        ICollection<FileInfo> matchingFileInfos = di.GetFiles(searchPattern, SearchOption.AllDirectories)
            .Where(x => x.LastWriteTimeUtc < DateTimeOffset.Now)
            .Select(x => x)
            .ToList();

Ayrıca gerekirse dizeleri geri çare olabilir. (ve yine de filtreler / nerede-madde maddeleri için kanıtlanmıştır.

        string baseFolder = @"C:\temp";
        DirectoryInfo di = new DirectoryInfo(baseFolder);

        string searchPattern = "*.xml";

        ICollection<string> matchingFileNames = di.GetFiles(searchPattern, SearchOption.AllDirectories)
            .Select(x => x.FullName)
            .ToList();

Uzantıya göre dosyalama yapmak istiyorsanız " . " İfadesinin geçerli bir arama deseni olduğunu unutmayın.


1
private void GetFiles(DirectoryInfo dir, ref List<FileInfo> files)
{
    try
    {
        files.AddRange(dir.GetFiles());
        DirectoryInfo[] dirs = dir.GetDirectories();
        foreach (var d in dirs)
        {
            GetFiles(d, ref files);
        }
    }
    catch (Exception e)
    {

    }
}

1
Parametre neden filesolduğunu ref? Gerek yoktur.
Massimiliano Kraus

@MassimilianoKraus, gerekli olmasa da, yönteminin değişeceğini filesve new List<FileInfo>()artık sadece işe yaramaz olacak bir parametre olarak veremeyeceğinizi açıkça ortaya koyduğunu iddia ediyorum. Bazı alt optimizasyonlara izin verebilir ve gerekmedikçe yeni bir nesne oluşturmaktan kaçınabilir.
jeromej

@JeromeJ OOP'un ne olduğunu biliyorsanız, bir yönteme bir nesne ilettiğinizde, o yöntemin nesnenin özelliklerini / alanlarını değiştirebileceğini bilirsiniz. Yani refhiçbir şeyi netleştirmiyor. ref'Nin amacı bütün değiştirmektir filestehlikeli bir işlemdir ve burada bunun için gerek yoktur: sadece başka bir Listesinde için yeniden noktaya o gerekmez, Liste doldurabilir bile yöntemin arayan için işaretçi yığın. refsadece çok özel durumlarda kullanılmalıdır; çoğu zaman işleri daha işlevsel-paradigma şeklinde uygulamanız gerekir.
Massimiliano Kraus

1

Bunu önlemek için UnauthorizedAccessExceptionşunu kullanıyorum:

var files = GetFiles(@"C:\", "*.*", SearchOption.AllDirectories);
foreach (var file in files)
{
    Console.WriteLine($"{file}");
}

public static IEnumerable<string> GetFiles(string path, string searchPattern, SearchOption searchOption)
{
    var foldersToProcess = new List<string>()
    {
        path
    };

    while (foldersToProcess.Count > 0)
    {
        string folder = foldersToProcess[0];
        foldersToProcess.RemoveAt(0);

        if (searchOption.HasFlag(SearchOption.AllDirectories))
        {
            //get subfolders
            try
            {
                var subfolders = Directory.GetDirectories(folder);
                foldersToProcess.AddRange(subfolders);
            }
            catch (Exception ex)
            {
                //log if you're interested
            }
        }

        //get files
        var files = new List<string>();
        try
        {
            files = Directory.GetFiles(folder, searchPattern, SearchOption.TopDirectoryOnly).ToList();
        }
        catch (Exception ex)
        {
            //log if you're interested
        }

        foreach (var file in files)
        {
            yield return file;
        }
    }
}

1

Yalnızca dosya adlarına ihtiyacınız varsa ve buradaki çözümlerin çoğunu gerçekten sevmediğimden (özellik açısından veya okunabilirlik açısından), bu tembel olana ne dersiniz?

private void Foo()
{
  var files = GetAllFiles("pathToADirectory");
  foreach (string file in files)
  {
      // Use can use Path.GetFileName() or similar to extract just the filename if needed
      // You can break early and it won't still browse your whole disk since it's a lazy one
  }
}

/// <exception cref="T:System.IO.DirectoryNotFoundException">The specified path is invalid (for example, it is on an unmapped drive).</exception>
/// <exception cref="T:System.UnauthorizedAccessException">The caller does not have the required permission.</exception>
/// <exception cref="T:System.IO.IOException"><paramref name="path" /> is a file name.-or-A network error has occurred.</exception>
/// <exception cref="T:System.IO.PathTooLongException">The specified path, file name, or both exceed the system-defined maximum length. For example, on Windows-based platforms, paths must be less than 248 characters and file names must be less than 260 characters.</exception>
/// <exception cref="T:System.ArgumentNullException"><paramref name="path" /> is null.</exception>
/// <exception cref="T:System.ArgumentException"><paramref name="path" /> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref="F:System.IO.Path.InvalidPathChars" />.</exception>
[NotNull]
public static IEnumerable<string> GetAllFiles([NotNull] string directory)
{
  foreach (string file in Directory.GetFiles(directory))
  {
    yield return file; // includes the path
  }

  foreach (string subDir in Directory.GetDirectories(directory))
  {
    foreach (string subFile in GetAllFiles(subDir))
    {
      yield return subFile;
    }
  }
}

1

En kısa kayıt

string files = Directory.GetFiles(@"your_path", "*.jpg", SearchOption.AllDirectories);

0

Hernaldo'lara dayalı olarak, benim açımdaki bir yerde belirli bir dize içeren XML dosyaları gibi belirli bir desene sahip dosyaları bulmanız gerekiyorsa, benim açım:

// call this like so: GetXMLFiles("Platypus", "C:\\");
public static List<string> GetXMLFiles(string fileType, string dir)
{
    string dirName = dir; 
    var fileNames = new List<String>();
    try
    {
        foreach (string f in Directory.GetFiles(dirName))
        {
            if ((f.Contains(fileType)) && (f.Contains(".XML")))
            {
                fileNames.Add(f);
            }
        }
        foreach (string d in Directory.GetDirectories(dirName))
        {
            GetXMLFiles(fileType, d);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    return fileNames;
}

0

Modellenecek dosya ve klasörleri listeleme, özel uygulama.
Bu, başlangıç ​​dizininizden başlayarak tüm dosya ve klasörlerin tam listesini oluşturur.

public class DirOrFileModel
    {
        #region Private Members

        private string _name;
        private string _location;
        private EntryType _entryType;

        #endregion

        #region Bindings

        public string Name
        {
            get { return _name; }
            set
            {
                if (value == _name) return;
                _name = value;
            }
        }

        public string Location
        {
            get { return _location; }
            set
            {
                if (value == _location) return;
                _location = value;
            }
        }

        public EntryType EntryType
        {
            get { return _entryType; }
            set
            {
                if (value == _entryType) return;
                _entryType = value;
            }
        }

        public ObservableCollection<DirOrFileModel> Entries { get; set; }

        #endregion

        #region Constructor

        public DirOrFileModel()
        {
            Entries = new ObservableCollection<DirOrFileModel>();
        }

        #endregion
    }

    public enum EntryType
    {
        Directory = 0,
        File = 1
    }

Yöntem:

 static DirOrFileModel DirSearch(DirOrFileModel startDir)
        {
            var currentDir = startDir;
            try
            {
                foreach (string d in Directory.GetDirectories(currentDir.Location))
                {
                    var newDir = new DirOrFileModel
                    {
                        EntryType = EntryType.Directory,
                        Location = d,
                        Name = Path.GetFileName(d)
                    };
                    currentDir.Entries.Add(newDir);

                    DirSearch(newDir);
                }

                foreach (string f in Directory.GetFiles(currentDir.Location))
                {
                    var newFile = new DirOrFileModel
                    {
                        EntryType = EntryType.File,
                        Location = f,
                        Name = Path.GetFileNameWithoutExtension(f)
                    };
                    currentDir.Entries.Add(newFile);
                }

            }
            catch (Exception excpt)
            {
                Console.WriteLine(excpt.Message);
            }
            return startDir;
        }

Kullanımı:

var dir = new DirOrFileModel
            {
                Name = "C",
                Location = @"C:\",
                EntryType = EntryType.Directory
            };

            dir = DirSearch(dir);

0

Kısa ve basit bir çözüm

string dir = @"D:\PATH";

DateTime from_date = DateTime.Now.Date;
DateTime to_date = DateTime.Now.Date.AddHours(23);
var files = Directory.EnumerateFiles(dir, "*.*",SearchOption.AllDirectories).Select(i=>new FileInfo(i))
.Where(file=>file.LastWriteTime >= from_date && file.LastWriteTime <= to_date);
foreach(var fl in files)
    Console.WriteLine(fl.FullName);

0

Bu bir dizin ve alt dizinleri tüm dosyaları almak için bana yardımcı oldu, birisi için yararlı olabilir. [Yukarıdaki cevaplardan esinlenilmiştir]

static void Main(string[] args)
    {
        try
        {
            var root = @"G:\logs";
            DirectorySearch(root);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        Console.ReadKey();
    }





public static void DirectorySearch(string root, bool isRootItrated = false)
{
    if (!isRootItrated)
    {
        var rootDirectoryFiles = Directory.GetFiles(root);
        foreach (var file in rootDirectoryFiles)
        {
            Console.WriteLine(file);
        } 
    }

    var subDirectories = Directory.GetDirectories(root);
    if (subDirectories?.Any() == true)
    {
        foreach (var directory in subDirectories)
        {
            var files = Directory.GetFiles(directory);
            foreach (var file in files)
            {
                Console.WriteLine(file);
            }
            DirectorySearch(directory, true);
        }
    }
}

0
var d = new DirectoryInfo(@"C:\logs");
var list = d.GetFiles("*.txt").Select(m => m.Name).ToList();

0

Dizinde aşağı gitmek için max lvl ile bazı geliştirilmiş sürüm ve klasörleri hariç tutma seçeneği:

using System;
using System.IO;

class MainClass {
  public static void Main (string[] args) {

    var dir = @"C:\directory\to\print";
    PrintDirectoryTree(dir, 2, new string[] {"folder3"});
  }


  public static void PrintDirectoryTree(string directory, int lvl, string[] excludedFolders = null, string lvlSeperator = "")
  {
    excludedFolders = excludedFolders ?? new string[0];

    foreach (string f in Directory.GetFiles(directory))
    {
        Console.WriteLine(lvlSeperator+Path.GetFileName(f));
    } 

    foreach (string d in Directory.GetDirectories(directory))
    {
        Console.WriteLine(lvlSeperator + "-" + Path.GetFileName(d));

        if(lvl > 0 && Array.IndexOf(excludedFolders, Path.GetFileName(d)) < 0)
        {
          PrintDirectoryTree(d, lvl-1, excludedFolders, lvlSeperator+"  ");
        }
    }
  }
}

giriş dizini:

-folder1
  file1.txt
  -folder2
    file2.txt
    -folder5
      file6.txt
  -folder3
    file3.txt
  -folder4
    file4.txt
    file5.txt

işlevin çıktısı (klasör5 içeriği lvl sınırı nedeniyle hariç tutulur ve klasör3 içeriği excludedFolders dizisinde olduğu için hariç tutulur):

-folder1
  file1.txt
  -folder2
    file2.txt
    -folder5
  -folder3
  -folder4
    file4.txt
    file5.txt

-1

İşte B. Clay Shannon'ın kodunun excel dosyaları için statik olmayan bir versiyonu:

class ExcelSearcher
{
    private List<string> _fileNames;

    public ExcelSearcher(List<string> filenames)
    {
        _fileNames = filenames;
    }
    public List<string> GetExcelFiles(string dir, List<string> filenames = null)
    {

        string dirName = dir;
        var dirNames = new List<string>();
        if (filenames != null)
        {
            _fileNames.Concat(filenames);
        }
        try
        {
            foreach (string f in Directory.GetFiles(dirName))
            {
                if (f.ToLower().EndsWith(".xls") || f.ToLower().EndsWith(".xlsx"))
                {
                    _fileNames.Add(f);
                }
            }
            dirNames = Directory.GetDirectories(dirName).ToList();
            foreach (string d in dirNames)
            {
                GetExcelFiles(d, _fileNames);
            }
        }
        catch (Exception ex)
        {
            //Bam
        }
        return _fileNames;
    }

-1

Çok basit bir çözüm, dosyaların listesini döndürür.

    public static List<string> AllFilesInFolder(string folder)
    {
        var result = new List<string>();

        foreach (string f in Directory.GetFiles(folder))
        {
            result.Add(f);
        }

        foreach (string d in Directory.GetDirectories(folder))
        {
            result.AddRange(AllFilesInFolder(d));
        }

        return result;
    }

-2
static void Main(string[] args)
        {
            string[] array1 = Directory.GetFiles(@"D:\");
            string[] array2 = System.IO.Directory.GetDirectories(@"D:\");
            Console.WriteLine("--- Files: ---");
            foreach (string name in array1)
            {
                Console.WriteLine(name);
            }
            foreach (string name in array2)
            {
                Console.WriteLine(name);
            }
                  Console.ReadLine();
        }

1
ahhh ... bu özyinelemeli değil
mxmissile
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.