Sdílet prostřednictvím


FileStream uzamkne soubory se sdíleným zámkem v unixovém systému Unix.

Pokud v systému Unix otevřete soubor pouze FileStream s oprávněními FileAccess.Read a potom zavoláte FileStream.Lock(Int64, Int64) zamknutí oblasti souboru, operace bude nyní úspěšná. Je to úspěšné, protože modul runtime zamkne soubor sdíleným zámkem nebo zámkem pro čtení místo zámku zápisu.

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
}

Ve Windows nedošlo k žádné změně chování, kdy operace vždy proběhla úspěšně.

Předchozí chování

Pokud jste v systému Unix otevřeli soubor pouze s FileStream oprávněními ke čtení a pak volali FileStream.Lock(Int64, Int64) k uzamčení oblasti souboru, modul runtime se pokusil soubor uzamknout zámkem zápisu. Výsledkem je UnauthorizedAccessException zpráva "Přístup k cestě je odepřen".

Nové chování

Počínaje rozhraním .NET 6 otevřete soubor pomocí FileStream oprávnění ke čtení pouze v systému Unix a potom zavoláte FileStream.Lock(Int64, Int64) uzamčení oblasti souboru, modul runtime zamkne soubor zámkem čtení (označuje se také jako sdílený zámek).

Zavedená verze

.NET 6 RC 1

Typ zásadní změny

Tato změna může ovlivnit binární kompatibilitu.

Důvod změny

FileStream.Lock(Int64, Int64) je rozhraní API, které umožňuje uživatelům uzamknout konkrétní oblast souboru. Neexistuje žádné rozhraní API, které vám umožní zvolit základní metodu uzamčení, takže FileStream.Lock(Int64, Int64) by měla správně určit odpovídající metodu uzamčení pro oprávnění k souborům.

Před .NET 6, abyste mohli soubor uzamknout, museli jste udělat jednu z těchto věcí:

Pokud jste použili jedno z těchto alternativních řešení, můžete je teď odebrat.

Ovlivněná rozhraní API