Bagaimana cara mendaftarkan semua file secara rekursif dalam direktori di C #?


315

Bagaimana cara secara rekursif mendaftarkan semua file dalam direktori dan direktori anak di C #?


1
Di mana Anda ingin mengisi? Jika pohon ... di sini adalah contoh dreamincode.net/code/snippet2591.htm
Arsen Mkrtchyan

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

Anda mungkin ingin melihat pertanyaan ini di mana saya telah menyajikan contoh kode yang menggunakan rekursi untuk membuat struktur direktori di TreeView. Logikanya harus sama dalam banyak kasus.
Cerebrus

5
Masalah dengan hal ini adalah bahwa itu rusak sangat mudah jika Anda tidak memiliki akses ke direktori tunggal: tidak ada hasil ...
Marc Gravell

1
Jika Anda mengalami masalah ketika beberapa file tidak dapat diakses, lihat Menghitung Pengecualian File Melontar
CodesInChaos

Jawaban:


186

Artikel ini mencakup semua yang Anda butuhkan. Kecuali sebagai lawan mencari file dan membandingkan nama, cukup cetak nama.

Itu dapat dimodifikasi seperti:

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

Ditambahkan oleh barlop

GONeale menyebutkan bahwa di atas tidak mencantumkan file dalam direktori saat ini dan menyarankan untuk meletakkan bagian daftar file di luar bagian yang mendapat direktori. Yang berikut akan melakukannya. Ini juga termasuk garis Writeline yang dapat Anda batalkan komentar, yang membantu melacak di mana Anda berada dalam rekursi yang dapat membantu menunjukkan panggilan untuk membantu menunjukkan bagaimana rekursi bekerja.

            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
Metode ini tidak mencantumkan file untuk direktori awal, hanya subdirektori dan lebih rendah. Saya akan memindahkan GetFiles ke luar
GetDirectories

1
Kadang-kadang seseorang tidak ingin file untuk direktori awal, dalam hal ini sangat cocok untuk struktur yang cukup kecil. Untuk daftar yang sangat besar, gunakan sesuatu seperti solusi Marc Gravell: stackoverflow.com/a/929418/91189
Joseph Gabriel

2
@ GONeale benar. Jauh lebih masuk akal bagi pengguna untuk tidak mengharapkan daftar file dari direktori root input. Input kata adalah kunci di sini. Ini adalah input karena suatu alasan.
Florin Mircea

2
Saya harus menambahkan mencoba menangkap di sekitar loop foreach batin jika tidak itu tidak melanjutkan kesalahan akses ditolak
Shaun Vermaak

3
Anda harus menghindari penangkapan Exception - apakah Anda benar-benar ingin menangkap An OutOfMemoryException misalnya? Hanya tangkap apa yang bisa Anda tangani.
alastairtree

435

Perhatikan bahwa di .NET 4.0 ada (seharusnya) fungsi file berbasis iterator (bukan berbasis array) yang dibangun di:

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

Saat ini saya akan menggunakan sesuatu seperti di bawah ini; metode rekursif bawaan terlalu mudah rusak jika Anda tidak memiliki akses ke satu sub-dir ...; yang Queue<string>penggunaan menghindari terlalu banyak panggilan-stack rekursi, dan blok iterator menghindari kita memiliki array besar.

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
@soando Pada titik reparsi rekursif EnumerateFiles melempar IOException "Nama file tidak dapat diselesaikan oleh sistem"
SerG

5
Untuk semua yang ingin tahu apakah *.*juga menyertakan file tanpa ekstensi file: Ya, itu benar, diuji satu menit yang lalu.
Tobias Knauss

1
Untuk menggunakan ini, Anda perlu menambahkanusing System.IO;
Reinstate Monica - Goodbye SE

7
@Wiki dan untuk menggunakan ConsoleAnda perlu menambahkan using System;- tetapi karena IDE dapat menambahkan semua usingarahan yang diperlukan untuk Anda (ctrl +.), Dan karena kami tidak menggunakan apa pun yang eksotis di sini, adalah umum untuk tidak memasukkannya. Heck, Anda juga akan memerlukan classdefinisi dll. Katakan saja '
Marc Gravell

1
@MarcGravell Kami di Net inti dan Visual dunia Studio Kode sekarang, jadi termasuk Menggunakan pernyataan selalu diterima di setiap contoh kode Net untuk menyimpan serangkaian pencarian dan sia-sia "yak mencukur"
JohnC

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

2
Cara menghindari kesalahan jika pengguna login tidak memiliki akses pada beberapa folder.
Romil Kumar Jain

5
@Romil Saya tidak percaya potongan kode ini mencoba menunjukkan fungsionalitas penuh, hanya fungsionalitas mentah yang dicari OP. Terima kasih telah berbagi, Pescuma!
kayleeFrye_onDeck

@ KayleeFrye_onDeck, saya hanya menaruh perhatian kalau-kalau ada kenaikan untuk salah satu folder saat mendapatkan file. Karena masalah ini, kami menerapkan fungsi rekursif khusus kami.
Romil Kumar Jain

3
Anda akan menerima "UnauthorizedAccessException" dengan solusi ini. Anda harus memiliki solusi yang dapat menangani kesalahan seperti ini.
Kairan

13

Di .NET 4.5, setidaknya, ada versi ini yang jauh lebih pendek dan memiliki bonus tambahan untuk mengevaluasi kriteria file apa pun untuk dimasukkan dalam daftar:

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

Gunakan seperti ini:

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

Ini tidak menangani kasus di mana Anda memiliki direktori kosong ... tidak ada pernyataan kembali di dalam fungsi.
FrumkinWY

@FrumkinWY apa yang terjadi dengan direktori kosong? Saya tidak punya mesin yang berguna untuk menguji ini sekarang.
John Kaster

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

3

Di Framework 2.0 Anda dapat menggunakan (Ini daftar file folder root, yang terbaik adalah jawaban paling populer):

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

Beberapa jawaban bagus tetapi jawaban ini tidak menyelesaikan masalah saya.

Segera setelah masalah izin folder muncul: "Izin Ditolak" kode gagal. Inilah yang saya gunakan untuk mengatasi masalah "Izin Ditolak":

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

Semoga ini bisa membantu orang lain.


3

Solusi sederhana dan bersih

/// <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
Anda secara manual melakukan apa yang akan dilakukan DirectoryInfo.GetFiles () di luar kotak - cukup gunakan overload dengan SearchOption.AllDirectories dan itu akan muncul kembali dengan sendirinya. Jadi itu solusi yang rumit .
philw

2

Saya lebih suka menggunakan DirectoryInfo karena saya bisa mendapatkan FileInfo, bukan hanya string.

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

        string searchPattern = "*.xml";

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

Saya melakukan ini dalam kasus di masa depan saya perlu penyaringan masa depan .. berdasarkan pada properti FileInfo.

        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();

Saya juga dapat menggunakan kembali string jika perlu. (dan masih terbukti di masa depan untuk filter / hal-hal mana klausa.

        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();

Perhatikan bahwa " . " Adalah pola pencarian yang valid jika Anda ingin mengajukan dengan ekstensi.


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
Mengapa parameter filesadalah ref? Tidak perlu.
Massimiliano Kraus

@ MassimilianoKraus Saya berpendapat bahwa, meskipun tidak diperlukan, itu membuatnya lebih jelas bahwa metodenya akan berubah filesdan Anda tidak bisa hanya memberikan new List<FileInfo>()sebagai parameter lagi yang tidak akan berguna. Mungkin mengizinkan beberapa sub-optimasi dan menghindari membuat objek baru kecuali diminta.
jeromej

@JeromeJ jika Anda tahu apa OOP, Anda tahu bahwa setiap kali Anda melewati objek ke suatu metode, metode itu dapat mengubah properti / bidang objek. Jadi reftidak membuat apa pun lebih jelas. The ref's bertujuan untuk mengubah seluruh filespointer bahkan untuk penelepon metode ini: ini adalah operasi yang berbahaya dan di sini tidak ada kebutuhan untuk itu: Anda hanya dapat mengisi List, Anda tidak perlu re-titik untuk Daftar lain pada tumpukan. refharus digunakan hanya dalam kasus yang sangat khusus; sebagian besar waktu Anda hanya perlu mengimplementasikan hal-hal dengan cara yang lebih fungsional-paradigma.
Massimiliano Kraus

1

Untuk menghindarinya UnauthorizedAccessException, saya menggunakan:

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

Jika Anda hanya perlu nama file dan karena saya tidak terlalu menyukai sebagian besar solusi di sini (dari segi fitur atau dari segi keterbacaan), bagaimana dengan yang malas ini?

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

Rekor terpendek

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

0

Inilah sudut pandang saya, berdasarkan Hernaldo, jika Anda perlu menemukan file dengan nama pola tertentu, seperti file XML yang di suatu tempat di namanya mengandung string tertentu:

// 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

Mendaftar file dan folder ke model, implementasi kustom.
Ini membuat daftar lengkap semua file dan folder mulai dari direktori awal Anda.

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
    }

Metode:

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

Pemakaian:

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

            dir = DirSearch(dir);

0

Solusi singkat dan sederhana

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

Yang ini membantu saya untuk mendapatkan semua file dalam direktori dan sub direktori, Semoga bermanfaat bagi seseorang. [Terinspirasi dari jawaban di atas]

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

Beberapa versi yang disempurnakan dengan lvl maksimum untuk turun dalam direktori dan opsi untuk mengecualikan folder:

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+"  ");
        }
    }
  }
}

direktori input:

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

output fungsi (konten folder5 dikecualikan karena batas lvl dan konten folder3 dikecualikan karena berada dalam array excludedFolders):

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

-1

Ini adalah versi kode B. Clay Shannon yang tidak statis untuk file excel:

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

Solusi yang sangat sederhana, mengembalikan daftar file.

    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
uhhh ... ini bukan rekursif
mxmissile
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.