Giải nén đường dẫn từ đường dẫn / tên tệp OpenFileDialog


81

Tôi đang viết một tiện ích nhỏ bắt đầu bằng việc chọn tệp, sau đó tôi cần chọn một thư mục. Tôi muốn đặt mặc định thư mục thành nơi chứa tệp đã chọn.

OpenFileDialog.FileNametrả về đường dẫn đầy đủ & tên tệp - những gì tôi muốn là chỉ lấy phần đường dẫn (tên tệp sans) , vì vậy tôi có thể sử dụng phần đó làm thư mục đã chọn ban đầu .

    private System.Windows.Forms.OpenFileDialog ofd;
    private System.Windows.Forms.FolderBrowserDialog fbd;
    ...
    if (ofd.ShowDialog() == DialogResult.OK)
    {
        string sourceFile = ofd.FileName;
        string sourceFolder = ???;
    }
    ...
    fbd.SelectedPath = sourceFolder; // set initial fbd.ShowDialog() folder
    if (fbd.ShowDialog() == DialogResult.OK)
    {
       ...
    }

Có bất kỳ phương pháp .NET nào để thực hiện việc này không, hoặc tôi có cần sử dụng regex, split, trim,vv ??

Câu trả lời:


114

Sử dụng Pathlớp từ System.IO. Nó chứa các lệnh gọi hữu ích để thao tác các đường dẫn tệp, bao gồm cả GetDirectoryNamenhững gì bạn muốn, trả về phần thư mục của đường dẫn tệp.

Cách sử dụng rất đơn giản.

string directoryPath = Path.GetDirectoryName(filePath);

4
Cảm ơn - đó phải là một câu trả lời đơn giản. Lưu ý với bản thân: không nên viết mã sau nửa đêm. Đọc nhiều hơn chỉ là nguyên mẫu phương pháp cũng hữu ích, vì tài liệu VS liệt kê đây là chuỗi tĩnh công khai GetDirectoryName (đường dẫn chuỗi) & tôi đã hiểu sai tham số.
Kevin Haines

28

Còn cái này thì sao:

string fullPath = ofd.FileName;
string fileName = ofd.SafeFileName;
string path = fullPath.Replace(fileName, "");

17
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
    strfilename = openFileDialog1.InitialDirectory + openFileDialog1.FileName;
}

2
Thư mục ban đầu có thay đổi khi người dùng chọn tệp không? Nếu không, thì cách tiếp cận này sẽ gây ra sự cố khi người dùng thay đổi thư mục. Ngoài ra, tôi không nghĩ anh ấy muốn FileNamemột phần của mình sourceFolder.
Brian J

7

Bạn có thể sử dụng FolderBrowserDialog thay vì FileDialog và lấy đường dẫn từ kết quả OK.

FolderBrowserDialog browser = new FolderBrowserDialog();
string tempPath ="";

if (browser.ShowDialog() == DialogResult.OK)
{
  tempPath  = browser.SelectedPath; // prints path
}

1
Vì vậy, hãy chọn tệp đầu tiên và sau đó điều hướng đến nó một lần nữa và chọn thư mục ??
shinzou

0

Đây là cách đơn giản để làm điều đó!

string fullPath =openFileDialog1.FileName;
string directory;
directory = fullPath.Substring(0, fullPath.LastIndexOf('\\'));
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.