ทํางานกับเส้นทางไฟล์ใน .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