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


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_, но запрос возвращает его, что неверно.
Адриан


Что, если мне нужен единственный файл с таким названиемmacos.txt
Prashant Pimpale

Я хочу найти все файлы без расширений. У меня есть файлы с типом файла "файл" (без расширения), как я могу найти эти файлы?
sohaiby


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")

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


-1

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

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.