Найдите в папке файл с определенным расширением

93

Учитывая путь к папке (например, C:\Random Folder), как я могу найти в нем файл с определенным расширением, например txt? Я предполагаю, что мне нужно будет выполнить поиск *.txtв каталоге, но я не уверен, как я должен начать этот поиск в первую очередь.

Доминик К
источник

Ответы:

180

Посмотрите на System.IO.Directoryкласс и статический метод GetFiles. У него есть перегрузка, которая принимает путь и шаблон поиска. Пример:

 string[] files = System.IO.Directory.GetFiles(path, "*.txt");
Энтони Пеграм
источник
Благодарность! Все ответы были хорошими, но вы ответили первым, так что ... да :)
Dominic K
6
Это не сработает, если расширение будет чем-то вроде txt_. Я пытаюсь определить, есть ли в папке какой-либо файл * .exe, и у меня есть только один файл * .exe_, но запрос возвращает его, что неверно.
Адриан
1
Документация: msdn.microsoft.com/en-us/library/8he88b63(v=vs.110).aspx
Рэндалл Флэгг,
Что, если мне нужен единственный файл с таким названиемmacos.txt
Prashant Pimpale
Я хочу найти все файлы без расширений. У меня есть файлы с типом файла "файл" (без расширения), как я могу найти эти файлы?
sohaiby
31

Вы можете использовать класс Directory

 Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories)
sgriffinusa
источник
3
Это не сработает, если расширение будет чем-то вроде txt_ или чем-то еще, как указано в документации msdn.microsoft.com/en-us/library/wz42302f(v=vs.110).aspx
Рэндалл Флэгг
14

На самом деле это довольно просто. Вы можете использовать этот System.IO.Directoryкласс вместе с System.IO.Path. Что-то вроде (использование LINQ делает это еще проще):

var allFilenames = Directory.EnumerateFiles(path).Select(p => Path.GetFileName(p));

// Get all filenames that have a .txt extension, excluding the extension
var candidates = allFilenames.Where(fn => Path.GetExtension(fn) == ".txt")
                             .Select(fn => Path.GetFileNameWithoutExtension(fn));

Конечно, есть много вариаций этой техники. Некоторые другие ответы будут проще, если ваш фильтр будет проще. У этого есть преимущество отложенного перечисления (если это имеет значение) и более гибкой фильтрации за счет большего количества кода.

Грег Д.
источник
Спасибо за всю дополнительную работу, которую вы вложили в это. Однако я просто использую простую инструкцию, поскольку у меня есть только один текстовый файл в каталоге (он был извлечен моей программой).
Dominic K
3

Приведенный ниже метод возвращает только файлы с определенным расширением (например: файл с .txt, но не с .txt1)

public static IEnumerable<string> GetFilesByExtension(string directoryPath, string extension, SearchOption searchOption)
    {
        return
            Directory.EnumerateFiles(directoryPath, "*" + extension, searchOption)
                .Where(x => string.Equals(Path.GetExtension(x), extension, StringComparison.InvariantCultureIgnoreCase));
    }
хазджек
источник
1

Насколько я понимаю, это можно сделать двумя способами:

1) Вы можете использовать класс каталога с методом Getfiles и просматривать все файлы, чтобы проверить наше необходимое расширение.

Directory.GetFiles ("путь_вашей_папке) [i] .Contains (" *. Txt ")

2) Вы можете использовать класс пути с методом GetExtension, который принимает путь к файлу в качестве параметра и проверяет расширение. Чтобы получить путь к файлу, просто имейте условие цикла, которое будет извлекать один файл и возвращать путь к файлу, который может использоваться для проверки.

Path.GetExtension (ваш_file_path) .Equals (". Json")

Примечание. Обе логики должны находиться в состоянии цикла.

Pulkit Shah
источник
-1

Используйте этот код для чтения файла со всеми типами файлов расширения.

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Вишал Праджапати
источник