6 Stimmen

Wird durch den Aufruf von File.Exist eine Sperre auf eine Datei gesetzt?

Wenn ich versuche, eine Datei zu löschen, aber gleichzeitig ein anderer Prozess eine File.Exists(...) für dieselbe Datei ausführt, wird dadurch möglicherweise die Datei gesperrt und mein Prozess scheitert?

12voto

Adam Haile Punkte 29829

Nein, File.Exist() prüft nur, ob sich die betreffende Datei im Dateisystem unter dem angegebenen Pfad befindet. Sie greift nicht auf die Daten oder Header der Datei zu, so dass die Datei nicht gesperrt wird.

Nebenbei bemerkt: Selbst das Öffnen einer Datei führt nicht zwangsläufig dazu, dass sie gesperrt wird. Das hängt von den Zugriffsparametern ab, die Sie beim Öffnen wählen.

3voto

jro Punkte 7212

Nein, File.Exist sperrt die Datei nicht. Ein guter Weg, um zu sehen, was hinter den Kulissen passiert, ist ein Blick auf die Quellcode .

Holen Sie sich den Quellcode der Basisklassenbibliotheken des .Net Frameworks und sehen Sie sich an, was hinter den Kulissen vor sich geht. Insbesondere die Klasse System.IO.File hat einige sehr interessante Standardeinstellungen für die Dateiverarbeitung, das Sperren, Freigeben usw. In Fällen wie dem Ihren kann ein Blick auf die Quelle dessen, was hinter den Kulissen geschieht, den entscheidenden Unterschied bei der Gestaltung Ihrer Anwendung ausmachen.

Siehe den Link:

Was kann ich mit der Shared Source CLI tun? Die Shared Source CLI enthält eine Fülle von Technologien für Programmiersprachen. Sie dürfte für ein breites Publikum von Interesse sein, darunter:

  • Entwickler, die sich für die interne Funktionsweise von .NET Framework interessieren, können diese Implementierung der Befehlszeilenschnittstelle erkunden, um zu sehen, wie die Garbage Collection funktioniert, wie die JIT-Kompilierung und -Verifizierung gehandhabt wird, wie Sicherheitsprotokolle implementiert werden und wie Frameworks und virtuelle Objektsysteme organisiert sind.
  • Lehrkräfte und Forscher, die mit fortgeschrittener Compilertechnologie arbeiten. Forschungsprojekte zu Spracherweiterungen, JIT-Optimierungen und moderner Garbage Collection haben alle eine Grundlage in der Shared Source CLI. Moderne Compiler-Kurse können auf den Sprachen C# oder JScript basieren, die auf dem CLI implementiert sind.
  • Wer eigene CLI-Implementierungen entwickelt, findet in der Shared Source CLI einen unverzichtbaren Leitfaden und eine Ergänzung zu den ECMA-Standards.

2voto

Fenton Punkte 221749

Dies ist eine Antwort an anu - und an alle, die etwas Ähnliches mit Dateien machen.

Es ist ziemlich wichtig, auf Dateien mit einer using-Anweisung zuzugreifen. Dadurch wird sichergestellt, dass Sie Ihren Verweis auf die Datei ordnungsgemäß entsorgen.

using (var fs = File.OpenRead(path)) {
    // Do something
}

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