ทํางานกับเส้นทางไฟล์ใน .NET

เสร็จสมบูรณ์เมื่อ

.NET มีกลไกที่มีอยู่แล้วภายในสําหรับการทํางานกับเส้นทางระบบแฟ้ม

ในแบบฝึกหัดก่อนหน้านี้ เราไม่มีโฟลเดอร์จํานวนมากที่จะแยกวิเคราะห์ ถ้าคุณมีไฟล์ระบบที่มีแฟ้มและโฟลเดอร์จํานวนมาก เส้นทางการสร้างด้วยตนเองอาจน่าเบื่อ โชคดีที่ .NET มีค่าคงที่และฟังก์ชันอรรถประโยชน์ที่มีอยู่ภายในบางอย่างเพื่อให้ง่ายต่อการจัดการเส้นทางของไฟล์

ที่นี่คุณจะได้เรียนรู้เกี่ยวกับฟังก์ชันค่าคงที่และยูทิลิตี้บางอย่างใน System.IO namespace และประเภท System.Environment เพื่อให้คุณสามารถทําให้โปรแกรมของคุณฉลาดขึ้นและยืดหยุ่นได้มากขึ้น

กําหนดไดเรกทอรีปัจจุบัน

ในบางครั้ง คุณไม่ทราบว่าควรเรียกใช้ไดเรกทอรีหรือเส้นทางใดในไดเรกทอรีใด สมมติว่าคุณต้องการให้โปรแกรมของคุณใช้ไดเรกทอรีปัจจุบัน แต่คุณไม่ทราบเส้นทาง

.NET จะแสดงเส้นทางแบบเต็มไปยังไดเรกทอรีปัจจุบันผ่านทางเมธอด Directory.GetCurrentDirectory

Console.WriteLine(Directory.GetCurrentDirectory());

ถ้าคุณเรียกใช้โค้ดก่อนหน้าจากโฟลเดอร์ 201 ในโครงสร้างต่อไปนี้ Directory.GetCurrentDirectory() จะส่งกลับ stores\201:

📂 stores
    📂 201

ทํางานกับไดเรกทอรีพิเศษ

.NET ทํางานได้ทุกที่: บน Windows, macOS, Linux และแม้แต่บนระบบปฏิบัติการมือถือ เช่น iOS และ Android ระบบปฏิบัติการแต่ละระบบอาจหรืออาจไม่มีแนวคิดของโฟลเดอร์ระบบพิเศษ (เช่น ไดเรกทอรีหลัก— ซึ่งจะเฉพาะสําหรับไฟล์เฉพาะผู้ใช้ หรือไดเรกทอรีเดสก์ท็อป หรือไดเรกทอรีสําหรับจัดเก็บไฟล์ชั่วคราว)

ไดเรกทอรีพิเศษประเภทเหล่านี้แตกต่างกันสําหรับแต่ละระบบปฏิบัติการ จะยุ่งยากในการพยายามจดจําโครงสร้างไดเรกทอรีของระบบปฏิบัติการแต่ละระบบและดําเนินการสลับตามระบบปฏิบัติการปัจจุบัน

การแจงนับ System.Environment.SpecialFolder ระบุค่าคงที่เพื่อดึงข้อมูลเส้นทางไปยังโฟลเดอร์ระบบพิเศษ

รหัสต่อไปนี้จะส่งกลับเส้นทางไปยังโฟลเดอร์ Windows My Documents หรือไดเรกทอรี HOME ของผู้ใช้สําหรับระบบปฏิบัติการใด ๆ แม้ว่ารหัสกําลังทํางานบน Linux:

string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

ทํางานกับเส้นทาง

เส้นทางเป็นหัวข้อที่ปรากฏขึ้นบ่อยมากที่ .NET มีคลาสที่เรียกว่า Path โดยเฉพาะสําหรับการทํางานกับไฟล์เหล่านั้น

คลาส Path จะอยู่ในเนมสเปซ System.IO ของ .NET และไม่จําเป็นต้องติดตั้ง

อักขระเส้นทางพิเศษ

ระบบปฏิบัติการที่แตกต่างกันใช้อักขระที่แตกต่างกันเพื่อแยกระดับไดเรกทอรี

ตัวอย่างเช่น Windows ใช้เครื่องหมายทับขวา (stores\201) และ macOS ใช้เครื่องหมายทับไปข้างหน้า (stores/201)

เพื่อช่วยให้คุณใช้อักขระที่ถูกต้อง คลาส Path จะประกอบด้วยฟิลด์ DirectorySeparatorChar

.NET ตีความเขตข้อมูลนั้นลงในอักขระตัวคั่นที่สามารถใช้ได้กับระบบปฏิบัติการโดยอัตโนมัติเมื่อคุณต้องการสร้างเส้นทางด้วยตนเอง

Console.WriteLine($"stores{Path.DirectorySeparatorChar}201");

// returns:
// stores\201 on Windows
//
// stores/201 on macOS

เส้นทางการรวม

คลาส Path ทํางานกับแนวคิดของเส้นทางไฟล์และโฟลเดอร์ ซึ่งเป็นเพียงสตริง คุณสามารถใช้คลาส Path เพื่อสร้างเส้นทางที่ถูกต้องสําหรับระบบปฏิบัติการเฉพาะโดยอัตโนมัติ

ตัวอย่างเช่น หากคุณต้องการรับเส้นทางไปยังโฟลเดอร์ จัดเก็บ/201 คุณสามารถใช้ฟังก์ชัน Path.Combine เพื่อทําเช่นนั้นได้

Console.WriteLine(Path.Combine("stores","201")); // outputs: stores/201

โปรดจําไว้ว่า คุณควรใช้คลาส Path.Combine หรือ Path.DirectorySeparatorChar แทนสตริงการเข้ารหัสแบบตายตัว เนื่องจากโปรแกรมของคุณอาจทํางานบนระบบปฏิบัติการอื่นหลายระบบ คลาส Path จะจัดรูปแบบเส้นทางที่ถูกต้องสําหรับระบบปฏิบัติการที่กําลังเรียกใช้อยู่เสมอ

ปลาย

คลาส Path ไม่สนใจว่าจริง ๆ แล้วมีอะไรอยู่หรือไม่ เส้นทางคือแนวคิด ไม่ใช่ทางกายภาพ และคลาสกําลังสร้างและแยกวิเคราะห์สตริงสําหรับคุณ

กําหนดนามสกุลไฟล์

ระดับ Path ยังสามารถบอกนามสกุลของชื่อไฟล์ให้คุณได้ ถ้าคุณมีไฟล์และคุณต้องการทราบว่าเป็นไฟล์ JSON หรือไม่ คุณสามารถใช้ฟังก์ชัน Path.GetExtension ได้

Console.WriteLine(Path.GetExtension("sales.json")); // outputs: .json

รับทุกสิ่งที่คุณต้องการทราบเกี่ยวกับไฟล์หรือเส้นทาง

ระดับชั้น Path ประกอบด้วยวิธีการต่าง ๆ มากมายที่ทํางานในสิ่งต่างๆ คุณสามารถรับข้อมูลส่วนใหญ่เกี่ยวกับไดเรกทอรีหรือไฟล์โดยใช้ระดับชั้น DirectoryInfo หรือ FileInfo ตามลําดับ

string fileName = $"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales{Path.DirectorySeparatorChar}sales.json";

FileInfo info = new FileInfo(fileName);

Console.WriteLine($"Full Name: {info.FullName}{Environment.NewLine}Directory: {info.Directory}{Environment.NewLine}Extension: {info.Extension}{Environment.NewLine}Create Date: {info.CreationTime}"); // And many more

มีคุณสมบัติและวิธีการอรรถประโยชน์ที่เป็นประโยชน์มากมายใน PathDirectoryInfoและ FileInfo คลาส แต่แนวคิดหลักเหล่านี้เป็นแนวคิดหลักที่คุณมักจะใช้บ่อยที่สุด ในแบบฝึกหัดถัดไป คุณจะเขียนเส้นทางและระบุไฟล์ .json