Подтвердить что ты не робот

Способ получения всех файлов в папке и вложенных папках, которые возвратят список

У меня есть метод, который будет проходить через папку и все ее подпапки и получить список путей к файлу. Однако я мог только выяснить, как его создать и добавить файлы в открытый список, но не как вернуть список. Здесь метод:

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

Итак, я просто вызываю DirSearch() в какой-то момент своего кода, и он заполняет список с помощью путей, но я хочу иметь возможность использовать его несколько раз для создания разных списков с разными каталогами и т.д.

4b9b3361

Ответ 1

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

и если вы не хотите загружать весь список в память и избегать блокировки, вы можете взглянуть на following answer.

Ответ 2

Вы можете использовать Directory.GetFiles для замены своего метода.

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

Ответ 3

Просто используйте это:

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

И если вы хотите, чтобы каждый файл, даже без расширения:

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

Ответ 4

вы можете использовать что-то вроде этого:

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

вместо использования "." вы можете ввести имя файла или просто тип типа "*.txt" также SearchOption.AllDirectories - это поиск во всех подпапках, которые вы можете изменить, если вы хотите только один уровень подробнее о том, как использовать его на здесь

Ответ 5

Я не уверен, почему вы добавляете строки в files, который объявляется как поле, а не временная. Вы можете изменить подпись DirSearch на:

private List<string> DirSearch(string sDir)

И после блока catch добавьте:

return files;

В качестве альтернативы вы можете создать временную переменную внутри своего метода и вернуть ее, что мне кажется подходящим для вас способом. В противном случае, каждый раз, когда вы вызываете этот метод, вновь найденные строки будут добавлены в тот же список, что и раньше, и у вас будут дубликаты.

Ответ 6

Попробуйте это  классная программа   {       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;
    }
}

Ответ 7

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