วิธีที่ง่ายที่สุดในการรับไดเรคทอรีซึ่งเป็นไฟล์นั้นคืออะไร? ฉันใช้สิ่งนี้เพื่อตั้งค่าไดเรกทอรีทำงาน
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.IOnamespace
new FileInfo(path).Directory.FullNameควรทำงานในทั้งสองกรณี
System.IO.Path.GetDirectoryName(filename)
Path.GetDirectoryName(filename);
คุณสามารถใช้System.IO.Path.GetDirectory(filename)หรือเปิดเส้นทางเป็นและการใช้งานFileInfoFileInfo.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"