Pertanyaan Metode untuk mendapatkan semua file di dalam folder dan subfolder yang akan mengembalikan daftar


Saya memiliki metode yang akan mengulang melalui folder dan semua subfoldernya dan mendapatkan daftar jalur file. Namun, saya hanya bisa mencari cara untuk membuatnya dan menambahkan file ke Daftar publik, tetapi tidak bagaimana mengembalikan daftar. Begini caranya:

public List<String> files = new List<String>();

private void DirSearch(string sDir)
    {
        try
        {
            foreach (string f in Directory.GetFiles(sDir))
            {
                files.Add(f);
            }
            foreach (string d in Directory.GetDirectories(sDir))
            {
                DirSearch(d);
            }
        }
        catch (System.Exception excpt)
        {
            MessageBox.Show(excpt.Message);
        }
    }

Jadi, saya baru saja menelepon DirSearch() di beberapa titik di kode saya dan itu 'mengisi' daftar dengan jalur, tetapi saya ingin dapat menggunakannya beberapa kali untuk membuat daftar berbeda dengan direktori yang berbeda, dll.


31
2018-01-13 16:37


asal


Jawaban:


private List<String> DirSearch(string sDir)
{
    List<String> files = new List<String>();
    try
    {
        foreach (string f in Directory.GetFiles(sDir))
        {
            files.Add(f);
        }
        foreach (string d in Directory.GetDirectories(sDir))
        {
            files.AddRange(DirSearch(d));
        }
    }
    catch (System.Exception excpt)
    {
        MessageBox.Show(excpt.Message);
    }

    return files;
}

dan jika Anda tidak ingin memuat seluruh daftar dalam memori dan menghindari pemblokiran, Anda dapat melihat pada following answer.


36
2018-01-13 16:40



Kamu dapat memakai Directory.GetFiles untuk mengganti metode Anda.

 Directory.GetFiles(dirPath, "*", SearchOption.AllDirectories)

111
2018-01-13 16:40



Cukup gunakan ini:

public static List<String> GetAllFiles(String directory)
{
    return Directory.GetFiles(directory, "*.*", SearchOption.AllDirectories).ToList();
}

Dan jika Anda ingin setiap file, bahkan yang tanpa ekstensi:

public static List<String> GetAllFiles(String directory)
{
    return Directory.GetFiles(directory, "*", SearchOption.AllDirectories).ToList();
}

18
2018-01-13 16:45



Anda dapat menggunakan sesuatu seperti ini:

string [] filePaths = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);

daripada menggunakan "."Anda dapat mengetikkan nama file atau hanya tipe seperti" * .txt " juga SearchOption.AllDirectories adalah mencari di semua subfolder Anda dapat mengubahnya jika Anda hanya menginginkan satu level lebih lanjut tentang cara menggunakannya sini


12
2017-12-07 00:54



Saya tidak yakin mengapa Anda menambahkan string files, yang dinyatakan sebagai bidang alih-alih variabel sementara. Anda dapat mengubah tanda tangan DirSearch untuk:

private List<string> DirSearch(string sDir)

Dan, setelah itu catch blokir, tambahkan:

return files;

Sebagai alternatif, Anda dapat membuat variabel sementara di dalam metode Anda dan mengembalikannya, yang menurut saya merupakan pendekatan yang mungkin Anda inginkan. Jika tidak, setiap kali Anda memanggil metode itu, string yang baru ditemukan akan ditambahkan ke daftar yang sama seperti sebelumnya dan Anda akan memiliki duplikat.


2
2018-01-13 16:39



Coba ini
 Program kelas     {         static void Main (string [] args)         {

        getfiles get = new getfiles();
        List<string> files =  get.GetAllFiles(@"D:\Rishi");

        foreach(string f in files)
        {
            Console.WriteLine(f);
        }


        Console.Read();
    }


}

class getfiles
{
    public List<string> GetAllFiles(string sDirt)
    {
        List<string> files = new List<string>();

        try
        {
            foreach (string file in Directory.GetFiles(sDirt))
            {
                files.Add(file);
            }
            foreach (string fl in Directory.GetDirectories(sDirt))
            {
                files.AddRange(GetAllFiles(fl));
            }
        }
        catch (Exception ex)
        {

            Console.WriteLine(ex.Message);
        }



        return files;
    }
}

0
2017-11-30 06:20



String[] allfiles = System.IO.Directory.GetFiles("path/to/dir", "*.*", System.IO.SearchOption.AllDirectories);

0
2017-09-03 01:48



Ini untuk siapa saja yang mencoba mendapatkan daftar semua file dalam folder dan sub-foldernya dan menyimpannya dalam sebuah dokumen teks. Di bawah ini adalah kode lengkap termasuk pernyataan "menggunakan", "ruang nama", "kelas", "metode", dll. Saya mencoba berkomentar sebanyak mungkin di seluruh kode sehingga Anda dapat memahami apa yang dilakukan setiap bagian. Ini akan membuat dokumen teks yang berisi daftar semua file di semua folder dan sub-folder dari setiap folder root yang diberikan. Lagi pula, apa gunanya daftar (seperti di Console.WriteLine) jika Anda tidak dapat melakukan sesuatu dengannya. Di sini saya telah membuat folder pada drive C yang disebut "Folder1" dan membuat folder di dalam yang disebut "Folder2". Selanjutnya saya mengisi folder2 dengan banyak file, folder dan file dan folder di dalam folder tersebut. Kode contoh ini akan mendapatkan semua file dan membuat daftar dalam dokumen teks dan menempatkan dokumen teks itu di Folder1. Perhatian: Anda tidak boleh menyimpan dokumen teks ke Folder2 (folder tempat Anda membaca), itu hanya praktik buruk. Selalu simpan ke folder lain.
Saya harap ini membantu seseorang di telepon.

using System;
using System.IO;

namespace ConsoleApplication4
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Create a header for your text file
            string[] HeaderA = { "****** List of Files ******" };
            System.IO.File.WriteAllLines(@"c:\Folder1\ListOfFiles.txt", HeaderA);

            // Get all files from a folder and all its sub-folders. Here we are getting all files in the folder
            // named "Folder2" that is in "Folder1" on the C: drive. Notice the use of the 'forward and back slash'.
            string[] arrayA = Directory.GetFiles(@"c:\Folder1/Folder2", "*.*", SearchOption.AllDirectories);
            {
                //Now that we have a list of files, write them to a text file.
                WriteAllLines(@"c:\Folder1\ListOfFiles.txt", arrayA);
            }

            // Now, append the header and list to the text file.
            using (System.IO.StreamWriter file =
                new System.IO.StreamWriter(@"c:\Folder1\ListOfFiles.txt"))
            {
                // First - call the header 
                foreach (string line in HeaderA)
                {
                    file.WriteLine(line);
                }

                file.WriteLine(); // This line just puts a blank space between the header and list of files. 


                // Now, call teh list of files.
                foreach (string name in arrayA)
                {
                    file.WriteLine(name);
                }

            }
          }


        // These are just the "throw new exception" calls that are needed when converting the array's to strings. 

        // This one is for the Header.
        private static void WriteAllLines(string v, string file)
        {
            //throw new NotImplementedException();
        }

        // And this one is for the list of files. 
        private static void WriteAllLines(string v, string[] arrayA)
        {
            //throw new NotImplementedException();
        }



    }
}

0
2018-04-03 17:39