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.