ฉันจะรับไดเรกทอรีจากเส้นทางแบบเต็มของไฟล์ได้อย่างไร


526

วิธีที่ง่ายที่สุดในการรับไดเรคทอรีซึ่งเป็นไฟล์นั้นคืออะไร? ฉันใช้สิ่งนี้เพื่อตั้งค่าไดเรกทอรีทำงาน

string filename = @"C:\MyDirectory\MyFile.bat";

ในตัวอย่างนี้ฉันควรได้รับ "C: \ MyDirectory"


3
ไม่ควรที่จะเป็นตัวอักษรสตริง? @"C:\MyDirectory\MyFile.bat"
Edgar

3
ใครบางคนต้องการที่จะปกป้องคำถามนี้ที่มีสิทธิที่จะทำเช่นนั้น? 11 คำตอบที่คล้ายกันกับที่ผ่านมาจาก 2,017 ..
Boern

คำตอบ:


837

Path.GetDirectoryName(path)หากคุณได้แน่นอนมีเส้นทางที่แน่นอนใช้

หากคุณอาจได้รับชื่อที่เกี่ยวข้องเท่านั้นให้ใช้ new FileInfo(path).Directory.FullNameหากคุณอาจได้รับเพียงชื่อญาติใช้

โปรดทราบว่าPathและFileInfoมีทั้งที่พบในการ System.IOnamespace


1
แน่นอน แต่มีวิธีที่เรียกว่า GetDirectory หรือไม่ ไม่ใช่ GetDirectoryName ใช่ไหม
Brandon

1
คุณสามารถใช้ DirectoryName แทน Directory.FullPath ได้หรือไม่
Steven Robbins

1
ฉันกำลังพิสูจน์การรับชื่อญาติ ฉันไม่ได้เห็นว่าเส้นทางจะสมบูรณ์ ตอนนี้ผมได้มีทั้งสองรุ่น :)
จอนสกีต

คุณใช้ตัวอย่างเพื่อตรวจสอบว่า? ;)
shahkalpesh

1
@ UlyssesAlves: ฉันเชื่อว่าnew FileInfo(path).Directory.FullNameควรทำงานในทั้งสองกรณี
Jon Skeet



12

คุณสามารถใช้System.IO.Path.GetDirectory(filename)หรือเปิดเส้นทางเป็นและการใช้งานFileInfoFileInfo.Directory

หากคุณกำลังทำสิ่งอื่น ๆ ด้วยเส้นทางFileInfoอาจมีข้อดี


1
ไม่มี 'GetDirectory วิธีการในคลาสเส้นทาง คุณต้องมีความหมาย 'GetDirectoryName
BillW

12

ใช้รหัสที่กล่าวถึงด้านล่างเพื่อรับเส้นทางโฟลเดอร์

Path.GetDirectoryName(filename);

สิ่งนี้จะส่งคืน"C: \ MyDirectory"ในกรณีของคุณ



5

หากคุณกำลังทำงานกับ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



0

ก่อนอื่นคุณต้องใช้เนมสเปซ System.IO แล้ว;

string filename = @"C:\MyDirectory\MyFile.bat";
string newPath = Path.GetFullPath(fileName);

หรือ

string newPath = Path.GetFullPath(openFileDialog1.FileName));

0

คุณสามารถใช้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\"


0

ในกรณีของฉันฉันจำเป็นต้องค้นหาชื่อไดเรกทอรีของเส้นทางแบบเต็ม (ของไดเรกทอรี) ดังนั้นฉันก็ทำ:

var dirName = path.Split('\\').Last();

1
สหกรณ์ต้องการและไม่ได้"C:\MyDirectory" MyDirectoryคำแนะนำในการใช้วิธีการจัดการสตริงมีความเสี่ยงมีกับดักจำนวนมากแทนที่จะใช้Pathวิธีเฉพาะ
Sinatr

-1

Path.GetDirectoryName (Context.Parameters [ "assemblypath"])


Path.GetDirectoryNameมีการกล่าวถึงในคำตอบอื่น ๆ อีกมากมาย (รวมถึงคำตอบที่ยอมรับ)
barbsan

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