Ich habe hier einen Code, der kaputt geht, wenn das Verzeichnis nicht existiert:
System.IO.File.WriteAllText(filePath, content);
Ist es möglich, in einer Zeile (oder einigen Zeilen) zu überprüfen, ob das Verzeichnis, das zur neuen Datei führt, nicht vorhanden ist, und wenn nicht, es vor dem Erstellen der neuen Datei zu erstellen?
Ich verwende .NET 3.5.
Antworten:
Erschaffen
(new FileInfo(filePath)).Directory.Create()
Vor dem Schreiben in die Datei..... oder, wenn es existiert, dann erstellen (sonst nichts tun)
quelle
Task.Run(() => );
.Sie können folgenden Code verwenden
quelle
Directory.CreateDirectory
macht genau das, was Sie wollen: Es erstellt das Verzeichnis, wenn es noch nicht existiert. Es ist nicht erforderlich, zuerst eine explizite Überprüfung durchzuführen .path
es sich um eine Datei und nicht um ein Verzeichnis handelt. msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspxWie @hitec sagte, müssen Sie sicherstellen, dass Sie über die richtigen Berechtigungen verfügen. Wenn Sie dies tun, können Sie diese Zeile verwenden, um die Existenz des Verzeichnisses sicherzustellen:
Directory.CreateDirectory(Path.GetDirectoryName(filePath))
quelle
Eine elegante Möglichkeit, Ihre Datei in ein nicht vorhandenes Verzeichnis zu verschieben, besteht darin, die folgende Erweiterung für die native FileInfo-Klasse zu erstellen:
Verwenden Sie dann die brandneue MoveTo-Erweiterung:
Überprüfen Sie die Dokumentation zur Methodenerweiterung .
quelle
Mit File.Exists können Sie überprüfen, ob die Datei vorhanden ist, und sie mit File.Create erstellen bei Bedarf . Stellen Sie sicher, dass Sie überprüfen, ob Sie Zugriff haben, um Dateien an diesem Speicherort zu erstellen.
Sobald Sie sicher sind, dass die Datei vorhanden ist, können Sie sicher darauf schreiben. Als Vorsichtsmaßnahme sollten Sie Ihren Code in einen try ... catch-Block einfügen und die Ausnahmen abfangen, die die Funktion wahrscheinlich auslöst, wenn die Dinge nicht genau wie geplant verlaufen.
Zusätzliche Informationen für grundlegende Datei-E / A-Konzepte .
quelle
var filePath = context.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["ErrorLogFile"]));
var file = new FileInfo(filePath);
file.Directory.Create();
Wenn das Verzeichnis bereits vorhanden ist, führt diese Methode nichts aus.var sw = new StreamWriter(filePath, true);
sw.WriteLine(Enter your message here);
sw.Close();
quelle