Làm cách nào để lấy thư mục từ đường dẫn đầy đủ của tệp?


526

Cách đơn giản nhất để có được thư mục chứa một tập tin là gì? Tôi đang sử dụng điều này để thiết lập một thư mục làm việc.

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

Trong ví dụ này, tôi sẽ nhận được "C: \ MyDirectory".


3
Không phải đó là một chuỗi chữ? @"C:\MyDirectory\MyFile.bat"
Edgar

3
Có ai muốn bảo vệ câu hỏi này ai có quyền làm như vậy không? 11 câu trả lời tương tự với câu trả lời cuối cùng từ năm 2017 ..
Boern

Câu trả lời:


837

Nếu bạn chắc chắn có một con đường tuyệt đối, hãy sử dụng Path.GetDirectoryName(path).

Nếu bạn chỉ có thể có được một tên tương đối, sử dụng new FileInfo(path).Directory.FullName.

Lưu ý rằng PathFileInfocả hai được tìm thấy trong không gian tên System.IO.


1
Thật vậy, nhưng có một phương pháp gọi là GetDirectory? Có phải đó là GetDirectoryName không?
Brandon

1
Bạn chỉ có thể sử dụng DirectoryName thay vì Directory.FullPath được không?
Steven Robbins

1
Tôi đã chứng minh chống lại việc nhận được một tên tương đối. Tôi đã không phát hiện ra rằng con đường sẽ là tuyệt đối. Bây giờ tôi đã có cả hai phiên bản :)
Jon Skeet

Bạn có sử dụng snippy để kiểm tra không? ;)
shahkalpesh

1
@UlyssesAlves: Tôi tin rằng new FileInfo(path).Directory.FullNamenên hoạt động trong cả hai trường hợp.
Jon Skeet



12

Bạn có thể sử dụng System.IO.Path.GetDirectory(filename)hoặc biến đường dẫn thành a FileInfovà sử dụng FileInfo.Directory.

Nếu bạn đang làm những việc khác với con đường, FileInfocó thể có lợi thế.


1
không có phương thức 'GetDirectory trong lớp Path; bạn phải có nghĩa là '
GetDirectoryName

12

Sử dụng mã được đề cập dưới đây để có được đường dẫn thư mục

Path.GetDirectoryName(filename);

Điều này sẽ trả về "C: \ MyDirectory" trong trường hợp của bạn



5

Nếu bạn đang làm việc với một FileInfođối tượng, thì có một cách dễ dàng để trích xuất một stringđại diện cho đường dẫn đầy đủ của thư mục thông qua thuộc DirectoryNametính.

Mô tả FileInfo.DirectoryNametài sản thông qua MSDN:

Nhận một chuỗi đại diện cho đường dẫn đầy đủ của thư mục.

Sử dụng mẫu:

string filename = @"C:\MyDirectory\MyFile.bat";
FileInfo fileInfo = new FileInfo(filename);
string directoryFullPath = fileInfo.DirectoryName; // contains "C:\MyDirectory"

Liên kết đến tài liệu MSDN .


5

Bạn có thể nhận Đường dẫn ứng dụng hiện tại bằng cách sử dụng:

string AssemblyPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString();

Chúc may mắn!


0

Đầu tiên, bạn phải sử dụng không gian tên System.IO. Sau đó;

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

hoặc là

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

0

Bạn có thể sử dụng Path.GetFullPathcho hầu hết các trường hợp. Nhưng nếu bạn muốn có được đường dẫn trong trường hợp tên tệp tương đối nằm thì bạn có thể sử dụng phương thức chung dưới đây:

string GetPath(string filePath)
{
  return Path.GetDirectoryName(Path.GetFullPath(filePath))
}

Ví dụ:

GetPath("C:\Temp\Filename.txt") trở về "C:\Temp\"

GetPath("Filename.txt")trở lại current working directorynhư"C:\Temp\"


0

Trong trường hợp của tôi, tôi cần tìm tên thư mục của một đường dẫn đầy đủ (của một thư mục) vì vậy tôi chỉ cần làm:

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

1
OP cần "C:\MyDirectory"và không MyDirectory. Lời khuyên để sử dụng các phương pháp thao tác chuỗi là rủi ro, có nhiều bẫy, thay vì sử dụng Pathcác phương pháp chuyên dụng .
Sinatr

-1

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


Path.GetDirectoryNameđược đề cập trong nhiều câu trả lời khác (bao gồm cả câu trả lời được chấp nhận)
barbsan

à? Vì thế?? Có điểm nào sắp tới không?
Ami Vaknin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.