다음을 통해 공유


파일 스트림이 Unix에서 공유 잠금을 사용하여 파일을 잠금

Unix에서 FileAccess.Read 권한만 있는 FileStream을 사용하여 파일을 연 다음, FileStream.Lock(Int64, Int64)을 호출하여 파일의 영역을 잠그면 작업이 성공합니다. 런타임에서 쓰기 잠금 대신 공유 또는 읽기 잠금으로 파일을 잠그기 때문에 성공합니다.

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
}

작업이 항상 성공한 Windows의 동작은 변경되지 않습니다.

이전 동작

Unix에서 읽기 권한만 있는 FileStream을 사용하여 파일을 연 다음, FileStream.Lock(Int64, Int64)을 호출하여 파일 영역을 잠그는 경우는 런타임에서 쓰기 잠금으로 파일을 잠그려고 했습니다. 그 결과 UnauthorizedAccessException 및 "경로에 대한 액세스가 거부되었습니다."라는 메시지가 표시됩니다.

새 동작

.NET 6부터 Unix에 대한 읽기 권한만 있는 FileStream을 사용하여 파일을 연 다음, FileStream.Lock(Int64, Int64)을 호출하여 파일 영역을 잠그면 런타임에서 읽기 잠금(공유 잠금이라고도 함)으로 파일을 잠급니다.

도입된 버전

.NET 6 RC 1

호환성이 손상되는 변경의 형식

이 변경은 이진 호환성에 영향을 줄 수 있습니다.

변경 이유

FileStream.Lock(Int64, Int64)은 사용자가 파일의 특정 영역을 잠글 수 있도록 하는 API입니다. 기본 잠금 방법을 선택할 수 있는 API가 없으므로 FileStream.Lock(Int64, Int64)은 파일 권한에 대한 적절한 잠금 방법을 올바르게 결정해야 합니다.

.NET 6 이전에는 파일을 잠그려면 다음 중 하나를 수행해야 했습니다.

이러한 해결 방법 중 하나를 사용한 경우 이제 제거할 수 있습니다.

영향을 받는 API