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.?

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);

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, "");

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

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
}

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('\\'));
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.