Beim Abrufen von Dateinamen in einem bestimmten Ordner:
DirectoryInfo di = new DirectoryInfo(currentDirName);
FileInfo[] smFiles = di.GetFiles("*.txt");
foreach (FileInfo fi in smFiles)
{
builder.Append(fi.Name);
builder.Append(", ");
...
}
fi.Name
gibt mir einen Dateinamen mit der Erweiterung: file1.txt
, file2.txt
, file3.txt
.
Wie kann ich die Dateinamen ohne die Erweiterungen erhalten? ( file1
, file2
, file3
)
builder
wird eine InstanzStringBuilder
im OP-Code sein. Dies ist nur ein Beispiel für die Verwendung von GetFileNameWithoutExtension. Sie sollten wahrscheinlich Ihren eigenen Code schreiben, der ihn aufruft.GetFileNameWithoutExtension
nur die End- Erweiterung entfernt wird. Zum Beispiel kann der Dateinameexample.es6.js
wird wordenexample.es6
Verwenden Sie
Path.GetFileNameWithoutExtension()
.quelle
Diese Lösung verhindert auch das Hinzufügen eines nachgestellten Kommas.
Ich mag die DirectoryInfo, FileInfo für dieses Szenario nicht.
DirectoryInfo und FileInfo erfassen mehr Daten über den Ordner und die Dateien als erforderlich, sodass sie mehr Zeit und Speicher als erforderlich benötigen.
quelle
Directory.GetFiles
auchDirectoryInfo.GetFiles
jeden Tag, wenn ich nur Dateinamen möchte.Verwenden Sie
Path.GetFileNameWithoutExtension
. Der Pfad befindet sich im System.IO-Namespace.quelle
Dies gibt den Dateinamen nur ohne den Erweiterungstyp zurück. Sie können es auch ändern, sodass Sie sowohl den Namen als auch den Dateityp erhalten
Quelle: https://msdn.microsoft.com/en-us/library/system.io.path(v=vs.110).aspx
quelle
Als zusätzliche Antwort (oder als Ergänzung zu den vorhandenen Antworten) können Sie eine Erweiterungsmethode schreiben, um dies für Sie in der DirectoryInfo-Klasse zu erreichen. Hier ist ein Beispiel, das ich ziemlich schnell geschrieben habe und das verschönert werden könnte, um Verzeichnisnamen oder andere Kriterien für Änderungen usw. bereitzustellen:
Bearbeiten: Ich denke auch, dass diese Methode wahrscheinlich vereinfacht oder großartig sein könnte, wenn sie LINQ verwendet, um den Aufbau des Arrays zu erreichen, aber ich habe nicht die Erfahrung in LINQ, um dies für ein Beispiel dieser Art schnell genug zu tun.
Edit 2 (fast 4 Jahre später): Hier ist die LINQ-ified-Methode, die ich verwenden würde:
quelle
FileInfo
kennt seine eigene Erweiterung, so dass Sie es einfach entfernen könnenoder wenn Sie paranoid sind, dass es in der Mitte erscheinen könnte oder mikrooptimieren möchten:
quelle
Wenn der Dateiname das Verzeichnis enthält und Sie das Verzeichnis nicht verlieren müssen:
quelle
Versuche dies,
quelle
Nur für das Protokoll:
So kann man nicht verwenden ,
StringBuilder
aberString.Join()
. Bitte beachten Sie auch, dassPath.GetFileNameWithoutExtension()
ein vollständiger Pfad (fi.FullName
) erforderlich ist , nichtfi.Name
wie ich in einer der anderen Antworten gesehen habe.quelle
quelle