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?

Kevin Haines
quelle

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);
Jeff Yates
quelle
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, "");
Jan Macháček
quelle
17
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
    strfilename = openFileDialog1.InitialDirectory + openFileDialog1.FileName;
}
Max
quelle
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
}
Shaahin
quelle
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('\\'));
Abdel
quelle