9 Stimmen

Wie überprüfe ich, ob ich eine Datei in einem bestimmten Ordner erstellen kann?

Ich muss wissen, ob ich eine Datei in einem bestimmten Ordner erstellen kann, aber es gibt zu viele Dinge zu überprüfen, wie Berechtigungen, doppelte Dateien, usw. Ich suche etwas wie File.CanCreate(@"C:\myfolder\myfile.aaa"), habe aber solch eine Methode noch nicht gefunden. Das einzige, was ich mir überlegt habe, ist, einen Dummy-Datei zu erstellen und auf Ausnahmen zu überprüfen, aber dies ist eine hässliche Lösung, die sich auch auf die Leistung auswirkt. Kennen Sie eine bessere Lösung?

0 Stimmen

Beachten Sie jedoch, dass das Überprüfen, ob Sie eine Datei erstellen können (wie auch immer) und dann später tatsächlich die Datei zu erstellen, immer noch einen Fehler verursachen könnte (hier haben Sie einen Wettlaufzustand). Es ist daher in der Regel am besten, die (endgültige) Datei von Anfang an zu erstellen und mögliche Fehler/ Ausnahmen zu behandeln.

0 Stimmen

Du hast recht, aber ich stelle diese Informationen nur zur späteren Verwendung zur Verfügung. Ich bin nur dafür verantwortlich, diese Informationen bereitzustellen. Wenn sich die Berechtigungen danach ändern, wird ein anderer Fehler auftreten.

18voto

Marc Gravell Punkte 970173

Im Grunde genommen wird das Erstellen einer Dummy-Datei in den meisten Anwendungen keine großen Leistungseinbußen haben. Natürlich könnte es etwas knifflig werden, wenn Sie erweiterte Berechtigungen zum Erstellen, aber nicht zum Löschen haben...

Guids sind immer praktisch für zufällige Namen (um Konflikte zu vermeiden) - etwas wie:

string file = Path.Combine(dir, Guid.NewGuid().ToString() + ".tmp");
//   File.Exists(file) überprüfen, aber das wäre sehr unwahrscheinlich...
bool canCreate;
try
{
    using (File.Create(file)) { }
    File.Delete(file);
    canCreate = true;
}
catch
{
    canCreate = false;
}

0 Stimmen

Ich möchte es gerne tun, ohne eine Ausnahme zu erhalten, die das Debuggen unterbricht (ich könnte VS sagen, es "zu verstecken", aber ich würde es lieber nicht tun). Gibt es einen Weg?

0 Stimmen

@marc-gravell Wenn der Benutzer oder die Anwendung keine Löschberechtigung im spezifischen Ordner hat, wird eine temporäre Datei dort in diesem Ordner verbleiben.

1 Stimmen

@SyedIrfanAhmad Nun, ja; wenn Sie ausschließlich schreibgeschützte ACLs konfigurieren - können seltsame Dinge passieren; aber ich behaupte: der einzige Weg zu wissen, dass Sie wirklich eine Datei erstellen können, ist eine Datei zu erstellen

1voto

Davy Landman Punkte 14631

Sie können CAS verwenden, um zu überprüfen, ob es keine .NET-Richtlinien (caspol) gibt, die das Erstellen und Schreiben einer Datei an diesem Speicherort einschränken.

Aber dies deckt nicht die Windows-Richtlinien ab. Sie müssen manuell die NTFS-Richtlinien überprüfen. Und selbst dann gibt es Prozesse, die entscheiden können, dass Sie nicht berechtigt sind, eine Datei zu erstellen (zum Beispiel ein Virenscanner).

Der beste und vollständigste Weg ist es, es einfach auszuprobieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X