Tìm tệp có phần mở rộng nhất định trong thư mục


92

Với một đường dẫn thư mục (như C:\Random Folder), làm cách nào để tìm một tệp trong đó chứa một phần mở rộng nhất định, như txt? Tôi cho rằng tôi sẽ phải thực hiện tìm kiếm *.txttrong thư mục, nhưng tôi không chắc mình phải bắt đầu tìm kiếm này như thế nào ngay từ đầu.

Câu trả lời:


177

Nhìn vào System.IO.Directorylớp và phương thức tĩnh GetFiles. Nó có quá tải chấp nhận một đường dẫn và một mẫu tìm kiếm. Thí dụ:

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

Cảm ơn! Tất cả các câu trả lời là tốt, nhưng bạn đã trả lời đầu tiên như vậy ... yeah :)
Dominic K

6
Điều này không hoạt động nếu tiện ích mở rộng giống như txt_. Tôi đang cố gắng xác định xem có bất kỳ tệp * .exe nào trong một thư mục hay không và tôi chỉ có một tệp * .exe_, nhưng truy vấn trả về tệp đó, điều này không đúng.
Adrian


Nếu tôi muốn các tập tin duy nhất của những người đặt tên nhưmacos.txt
Prashant Pimpale

Tôi muốn tìm tất cả các tệp mà không có bất kỳ phần mở rộng nào. Tôi có một số tệp có loại tệp là "tệp" (không có phần mở rộng), làm cách nào để tìm các tệp đó?
sohaiby


14

Nó khá dễ dàng, thực sự. Bạn có thể sử dụng System.IO.Directorylớp học kết hợp với System.IO.Path. Một cái gì đó như (sử dụng LINQ làm cho nó dễ dàng hơn):

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

Tất nhiên, có nhiều biến thể về kỹ thuật này. Một số câu trả lời khác sẽ đơn giản hơn nếu bộ lọc của bạn đơn giản hơn. Điều này có lợi thế là liệt kê chậm trễ (nếu điều đó quan trọng) và lọc linh hoạt hơn với chi phí nhiều mã hơn.


Cảm ơn vì tất cả công việc bạn đã bỏ ra cho việc này. Tuy nhiên, tôi chỉ định tìm một câu lệnh đơn giản vì tôi chỉ có một tệp văn bản trong thư mục (nó được trích xuất bởi chương trình của tôi).
Dominic K

3

Phương thức bên dưới chỉ trả về các tệp có phần mở rộng nhất định (ví dụ: tệp có .txt nhưng không phải .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

Theo sự hiểu biết của tôi, điều này có thể được thực hiện theo hai cách:

1) Bạn có thể sử dụng Lớp thư mục với phương thức Getfiles và duyệt qua tất cả các tệp để kiểm tra phần mở rộng cần thiết của chúng tôi.

Directory.GetFiles ("your_folder_path) [i] .Contains (" *. Txt ")

2) Bạn có thể sử dụng Lớp đường dẫn với Phương thức GetExtension, lấy đường dẫn tệp làm tham số và xác minh phần mở rộng. Để lấy đường dẫn tệp, chỉ cần có một điều kiện lặp sẽ tìm nạp một tệp duy nhất và trả về đường dẫn tệp có thể được sử dụng để xác minh.

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

Lưu ý: Cả logic phải nằm trong điều kiện lặp.


-1

Sử dụng mã này để đọc tệp với tất cả các loại tệp mở rộng.

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.