Знайдіть у папці файл із певним розширенням


92

Враховуючи шлях до папки (наприклад C:\Random Folder, як), як я можу знайти в ньому файл, який містить певне розширення, наприклад txt? Я припускаю, що мені доведеться здійснити пошук *.txtу каталозі, але я не впевнений, як я повинен розпочати цей пошук.

Відповіді:


177

Подивіться на System.IO.Directoryклас і статичний метод GetFiles. Він має перевантаження, яке приймає шлях та шаблон пошуку. Приклад:

 string[] files = System.IO.Directory.GetFiles(path, "*.txt");

Дякую! Усі відповіді були хорошими, але ти відповів першим, так що ... так :)
Домінік К

6
Це не працює, якщо розширення має щось на зразок txt_. Я намагаюся визначити, чи є в папці файл * .exe, і у мене є лише один файл * .exe_, але запит повертає його, що є неправильним.
Адріан


Що робити, якщо я хочу єдиний файл із назвою likemacos.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));

Звичайно, у цієї техніки також є багато варіантів. Деякі інші відповіді простіші, якщо ваш фільтр простіший. Цей має перевагу відкладеного перерахування (якщо це важливо) та більш гнучкої фільтрації за рахунок більшої кількості коду.


Дякуємо за всю додаткову роботу, яку ви доклали до цього. Однак я просто йду до простої заяви, оскільки у мене є лише один текстовий файл у каталозі (його витягла моя програма).
Домінік К

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]. Містить (" *. Txt ")

2) Ви можете використовувати Path Class з методом GetExtension, який приймає шлях до файлу як параметр і перевіряє розширення. Щоб отримати шлях до файлу, просто створіть умову циклу, який отримає один файл і поверне шлях до файлу, який можна використовувати для перевірки.

Path.GetExtension (your_file_path) .Equals (". Json")

Примітка: Обидві логіки повинні знаходитись у циклічному стані.


-1

Використовуйте цей код для прочитаного файлу з усіма типами розширень.

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.