วิธีที่ง่ายที่สุดในการรับไดเรคทอรีซึ่งเป็นไฟล์นั้นคืออะไร? ฉันใช้สิ่งนี้เพื่อตั้งค่าไดเรกทอรีทำงาน
string filename = @"C:\MyDirectory\MyFile.bat";
ในตัวอย่างนี้ฉันควรได้รับ "C: \ MyDirectory"
วิธีที่ง่ายที่สุดในการรับไดเรคทอรีซึ่งเป็นไฟล์นั้นคืออะไร? ฉันใช้สิ่งนี้เพื่อตั้งค่าไดเรกทอรีทำงาน
string filename = @"C:\MyDirectory\MyFile.bat";
ในตัวอย่างนี้ฉันควรได้รับ "C: \ MyDirectory"
คำตอบ:
Path.GetDirectoryName(path)
หากคุณได้แน่นอนมีเส้นทางที่แน่นอนใช้
หากคุณอาจได้รับชื่อที่เกี่ยวข้องเท่านั้นให้ใช้ new FileInfo(path).Directory.FullName
หากคุณอาจได้รับเพียงชื่อญาติใช้
โปรดทราบว่าPath
และFileInfo
มีทั้งที่พบในการ System.IO
namespace
new FileInfo(path).Directory.FullName
ควรทำงานในทั้งสองกรณี
System.IO.Path.GetDirectoryName(filename)
Path.GetDirectoryName(filename);
คุณสามารถใช้System.IO.Path.GetDirectory(filename)
หรือเปิดเส้นทางเป็นและการใช้งานFileInfo
FileInfo.Directory
หากคุณกำลังทำสิ่งอื่น ๆ ด้วยเส้นทางFileInfo
อาจมีข้อดี
ใช้รหัสที่กล่าวถึงด้านล่างเพื่อรับเส้นทางโฟลเดอร์
Path.GetDirectoryName(filename);
สิ่งนี้จะส่งคืน"C: \ MyDirectory"ในกรณีของคุณ
คุณสามารถใช้Path.GetDirectoryName
และเพิ่งผ่านในชื่อไฟล์
หากคุณกำลังทำงานกับFileInfo
วัตถุนั้นมีวิธีที่ง่ายในการแยกการเป็นstring
ตัวแทนของเส้นทางแบบเต็มของไดเรกทอรีผ่านDirectoryName
คุณสมบัติ
คำอธิบายของFileInfo.DirectoryName
คุณสมบัติผ่าน MSDN:
รับค่าสตริงที่แทนพา ธ แบบเต็มของไดเร็กทอรี
ตัวอย่างการใช้งาน:
string filename = @"C:\MyDirectory\MyFile.bat";
FileInfo fileInfo = new FileInfo(filename);
string directoryFullPath = fileInfo.DirectoryName; // contains "C:\MyDirectory"
เชื่อมโยงไปยังเอกสาร MSDN
คุณสามารถรับ Application Path ปัจจุบันได้โดยใช้:
string AssemblyPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString();
โชคดี!
ก่อนอื่นคุณต้องใช้เนมสเปซ System.IO แล้ว;
string filename = @"C:\MyDirectory\MyFile.bat";
string newPath = Path.GetFullPath(fileName);
หรือ
string newPath = Path.GetFullPath(openFileDialog1.FileName));
คุณสามารถใช้Path.GetFullPath
สำหรับกรณีส่วนใหญ่ แต่ถ้าคุณต้องการหาพา ธ ด้วยในกรณีที่ชื่อไฟล์นั้นค่อนข้างจะอยู่คุณสามารถใช้วิธีการทั่วไปด้านล่าง:
string GetPath(string filePath)
{
return Path.GetDirectoryName(Path.GetFullPath(filePath))
}
ตัวอย่างเช่น:
GetPath("C:\Temp\Filename.txt")
กลับ "C:\Temp\"
GetPath("Filename.txt")
กลับมาcurrent working directory
เหมือนกัน"C:\Temp\"
ในกรณีของฉันฉันจำเป็นต้องค้นหาชื่อไดเรกทอรีของเส้นทางแบบเต็ม (ของไดเรกทอรี) ดังนั้นฉันก็ทำ:
var dirName = path.Split('\\').Last();
"C:\MyDirectory"
MyDirectory
คำแนะนำในการใช้วิธีการจัดการสตริงมีความเสี่ยงมีกับดักจำนวนมากแทนที่จะใช้Path
วิธีเฉพาะ
Path.GetDirectoryName (Context.Parameters [ "assemblypath"])
Path.GetDirectoryName
มีการกล่าวถึงในคำตอบอื่น ๆ อีกมากมาย (รวมถึงคำตอบที่ยอมรับ)
@"C:\MyDirectory\MyFile.bat"