Pfad aus OpenFileDialog-Pfad / Dateiname extrahieren


80

Ich schreibe ein kleines Dienstprogramm, das mit der Auswahl einer Datei beginnt, und dann muss ich einen Ordner auswählen. Ich möchte den Ordner standardmäßig auf die ausgewählte Datei festlegen.

OpenFileDialog.FileNameGibt den vollständigen Pfad und den Dateinamen zurück. Ich möchte nur den Pfadabschnitt (ohne Dateinamen) erhalten , damit ich diesen als ursprünglich ausgewählten Ordner verwenden kann .

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

Gibt es dafür .NET-Methoden oder muss ich regex, split, trim,etc verwenden?

Antworten:


114

Verwenden Sie die PathKlasse von System.IO. Es enthält nützliche Aufrufe zum Bearbeiten von Dateipfaden, einschließlich GetDirectoryNameder Funktionen, die den gewünschten Teil des Dateipfads zurückgeben.

Die Verwendung ist einfach.

string directoryPath = Path.GetDirectoryName(filePath);

4
Danke - es musste eine einfache Antwort sein. Hinweis für sich selbst: Eine Codierung nach Mitternacht wird nicht empfohlen. Es hilft auch, mehr als nur den Methodenprototyp zu lesen, da in der VS-Dokumentation dies als öffentliche statische Zeichenfolge GetDirectoryName (Zeichenfolgenpfad) aufgeführt ist und ich den Parameter falsch interpretiert habe.
Kevin Haines

28

Wie wäre es damit:

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
Ändert sich das ursprüngliche Verzeichnis, wenn der Benutzer eine Datei auswählt? Wenn nicht, würde dieser Ansatz ein Problem verursachen, wenn der Benutzer das Verzeichnis wechselt. Ich glaube auch nicht, dass er das FileNameals Teil von ihm wollte sourceFolder.
Brian J

7

Sie können FolderBrowserDialog anstelle von FileDialog verwenden und den Pfad aus dem OK-Ergebnis abrufen.

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

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

1
Wählen Sie also zuerst die Datei und navigieren Sie dann erneut zu ihr und wählen Sie den Ordner?
Shinzou

0

Hier ist der einfache Weg, es zu tun!

string fullPath =openFileDialog1.FileName;
string directory;
directory = fullPath.Substring(0, fullPath.LastIndexOf('\\'));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.