Aracılığıyla paylaş


FileStream, Unix'te paylaşılan kilit ile dosyaları kilitler

Unix'te, yalnızca izinlerle FileAccess.Read kullanarak FileStream bir dosya açar ve ardından dosyanın bir bölgesini kilitlemek için çağrısı FileStream.Lock(Int64, Int64) yaparsanız, işlem artık başarılı olur. Çalışma zamanı dosyayı yazma kilidi yerine paylaşılan veya okuma kilidiyle kilitlediğinden başarılı olur.

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
}

İşlemin her zaman başarılı olduğu Windows'ta davranışta bir değişiklik yoktur.

Önceki davranış

Unix'te, dosyayı yalnızca okuma izinlerine sahip bir FileStream kullanarak açtıysanız ve dosyanın bir bölgesini kilitlemek için çağrıldıysanız FileStream.Lock(Int64, Int64) , çalışma zamanı dosyayı yazma kilidiyle kilitlemeye çalıştı. Bunun sonucunda bir UnauthorizedAccessException ve "Yola erişim reddedildi" iletisiyle sonuçlandı.

Yeni davranış

.NET 6'dan başlayarak, dosyayı yalnızca Unix üzerinde okuma izinlerine sahip bir FileStream kullanarak açar ve dosyanın bir bölgesini kilitlemek için çağırırsanız FileStream.Lock(Int64, Int64) , çalışma zamanı dosyayı bir okuma kilidiyle (paylaşılan kilit olarak da bilinir) kilitler.

Sürüm kullanıma sunulmuştur

.NET 6 RC 1

Hataya neden olan değişikliğin türü

Bu değişiklik ikili uyumluluğu etkileyebilir.

Değişiklik nedeni

FileStream.Lock(Int64, Int64) , kullanıcıların dosyanın belirli bir bölgesini kilitlemesine olanak tanıyan API'dir. Temel kilitleme yöntemini seçmenize olanak tanıyan bir API olmadığından, FileStream.Lock(Int64, Int64) dosya izinleri için uygun kilitleme yöntemini doğru şekilde belirlemelidir.

.NET 6'nın öncesinde, dosyayı kilitleyebilmek için aşağıdakilerden birini yapmanız gerekiyordu:

Bu geçici çözümlerden birini kullandıysanız artık bunları kaldırabilirsiniz.

Etkilenen API’ler