ค้นหาไฟล์ที่มีนามสกุลบางอย่างในโฟลเดอร์


93

ระบุเส้นทางโฟลเดอร์ (เช่นC:\Random Folder) ฉันจะค้นหาไฟล์ในนั้นที่มีนามสกุลที่แน่นอนได้txtอย่างไร ฉันคิดว่าฉันจะต้องค้นหา*.txtในไดเรกทอรี แต่ฉันไม่แน่ใจว่าฉันควรจะเริ่มการค้นหานี้อย่างไรตั้งแต่แรก

คำตอบ:


181

ดูที่ชั้นเรียนและวิธีการแบบคงที่System.IO.Directory GetFilesมีโอเวอร์โหลดที่ยอมรับเส้นทางและรูปแบบการค้นหา ตัวอย่าง:

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

ขอบคุณ! คำตอบทั้งหมดนั้นดี แต่คุณตอบก่อนดังนั้น ... ใช่ :)
Dominic K

6
วิธีนี้ใช้ไม่ได้หากส่วนขยายเป็น txt_ ฉันกำลังพยายามตรวจสอบว่ามีไฟล์ * .exe อยู่ในโฟลเดอร์หรือไม่และฉันมีไฟล์ * .exe_ เพียงไฟล์เดียว แต่การสืบค้นกลับส่งคืนซึ่งไม่ถูกต้อง
Adrian


จะเป็นอย่างไรถ้าฉันต้องการไฟล์เดียวที่ชื่อ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) คุณสามารถใช้ Directory Class ด้วยเมธอด Getfiles และสำรวจไฟล์ทั้งหมดเพื่อตรวจสอบนามสกุลที่ต้องการของเรา

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

2) คุณสามารถใช้ Path Class ด้วย GetExtension Method ซึ่งใช้เส้นทางไฟล์เป็นพารามิเตอร์และตรวจสอบส่วนขยายหากต้องการรับเส้นทางไฟล์เพียงแค่มีเงื่อนไขการวนซ้ำที่จะดึงไฟล์เดียวและส่งคืน filepath ที่สามารถใช้สำหรับการตรวจสอบได้

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

หมายเหตุ: ตรรกะทั้งสองจะต้องอยู่ในเงื่อนไขการวนซ้ำ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.