Wyodrębnianie ścieżki ze ścieżki / nazwy pliku OpenFileDialog

81

Piszę małe narzędzie, które zaczyna się od wybrania pliku, a następnie muszę wybrać folder. Chciałbym ustawić domyślny folder, w którym znajdował się wybrany plik.

OpenFileDialog.FileNamezwraca pełną ścieżkę i nazwę pliku - chcę tylko uzyskać fragment ścieżki (bez nazwy pliku) , więc mogę użyć tego jako początkowego wybranego folderu .

    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)
    {
       ...
    }

Czy są jakieś metody .NET, aby to zrobić, czy muszę użyć regex, split, trim,itp.?

Kevin Haines
źródło

Odpowiedzi:

114

Użyj Pathklasy z System.IO. Zawiera przydatne wywołania do manipulowania ścieżkami plików, w tym, GetDirectoryNamektóre robi to, co chcesz, zwracając część katalogu ścieżki pliku.

Użycie jest proste.

string directoryPath = Path.GetDirectoryName(filePath);
Jeff Yates
źródło
4
Dzięki - to musiała być prosta odpowiedź. Uwaga dla siebie: kodowanie po północy nie jest zalecane. Pomaga również czytanie czegoś więcej niż tylko prototypu metody, ponieważ dokumentacja VS wymienia to jako publiczny ciąg statyczny GetDirectoryName (ścieżka ciągu) i błędnie zinterpretowałem parametr.
Kevin Haines
29

co powiesz na to:

string fullPath = ofd.FileName;
string fileName = ofd.SafeFileName;
string path = fullPath.Replace(fileName, "");
Jan Macháček
źródło
18
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
    strfilename = openFileDialog1.InitialDirectory + openFileDialog1.FileName;
}
Maks
źródło
2
Czy katalog początkowy zmienia się, gdy użytkownik wybierze plik? Jeśli nie, to takie podejście spowodowałoby problem, gdy użytkownik zmieni katalog. Nie sądzę też, żeby chciał, żeby był FileNameczęścią jego sourceFolder.
Brian J
7

Możesz użyć FolderBrowserDialog zamiast FileDialog i pobrać ścieżkę z wyniku OK.

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

if (browser.ShowDialog() == DialogResult.OK)
{
  tempPath  = browser.SelectedPath; // prints path
}
Shaahin
źródło
1
Więc najpierw wybierz plik, a następnie przejdź do niego ponownie i wybierz folder?
shinzou
0

Oto prosty sposób na zrobienie tego!

string fullPath =openFileDialog1.FileName;
string directory;
directory = fullPath.Substring(0, fullPath.LastIndexOf('\\'));
Abdel
źródło