Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Auf Unix, wenn Sie eine Datei nur mit FileStreamFileAccess.Read Berechtigungen öffnen und dann FileStream.Lock(Int64, Int64) aufrufen, um eine Region der Datei zu sperren, wird der Vorgang nun erfolgreich ausgeführt. Der Vorgang ist erfolgreich, weil die Runtime die Datei mit einer gemeinsamen Sperre oder einer Lesesperre anstelle einer Schreibsperre sperrt.
using (FileStream fs = File.OpenRead("testfile")) // Opening with FileAccess.Read only
{
fs.Lock((long) 3, (long) 1); // Attempting to lock a region of the read-only file
}
Es gibt keine Änderung des Verhaltens unter Windows, bei dem der Vorgang immer erfolgreich war.
Vorheriges Verhalten
Unter Unix, wenn Sie eine Datei mit FileStream nur Leseberechtigung geöffnet haben und dann FileStream.Lock(Int64, Int64) aufgerufen haben, um einen Bereich der Datei zu sperren, hat die Laufzeit versucht, die Datei mit einem Schreibschutz zu sperren. Dies führte zu einer UnauthorizedAccessException und der Meldung "Der Zugriff auf den Pfad wurde verweigert".
Neues Verhalten
Ab .NET 6 gilt Folgendes: Wenn Sie unter Unix eine Datei mit einem FileStream nur mit Leseberechtigungen öffnen und dann FileStream.Lock(Int64, Int64) aufrufen, um einen Bereich der Datei zu sperren, sperrt die Runtime die Datei mit einer Lesesperre (auch als gemeinsame Sperre bezeichnet).
Eingeführte Version
.NET 6 RC 1
Art der einschneidenden Änderung
Diese Änderung kann sich auf die Binäre Kompatibilität auswirken.
Grund für Änderung
FileStream.Lock(Int64, Int64) ist die API, mit der Benutzer eine bestimmte Region einer Datei sperren können. Es gibt keine API, mit der Sie die zugrunde liegende Sperrmethode auswählen können. Daher FileStream.Lock(Int64, Int64) sollten Sie die entsprechende Sperrmethode für die Dateiberechtigungen ordnungsgemäß ermitteln.
Empfohlene Aktion
Bevor .NET 6 die Datei sperren kann, mussten Sie eine der folgenden Aktionen ausführen:
- Überprüfen Sie, ob der Code in Windows ausgeführt oder der FileStream mit der Berechtigung FileAccess.Write geöffnet wurde.
- Umschließen Sie den Aufruf FileStream.Lock(Int64, Int64) mit
try catch
, um die UnauthorizedAccessException zu erfassen.
Wenn Sie eine dieser Problemumgehungen verwendet haben, können Sie diese jetzt entfernen.