파일 오픈 - 공유 오픈
꽁스짱
C#
0
797
2021.04.13 02:32
파일을 다른 쓰레드나 프로세스에서 함께 사용하기 위해서는 FileAccess 와 FileShare를 알맞게 사용해야 한다. FileAccess는 Read, Write, ReadWrite 세가지 중에 하나를 선택하는데, 이는 File.Open()을 수행하는 쓰레드가 파일을 읽기전용, 쓰기전용(읽기 불가), 읽기+쓰기로 파일을 엑세스하길 원한다것을 표시한다. FileShare는 None, Read, Write, ReadWrite 등을 사용하는데, 현재 쓰레드가 파일 오픈에 성공한다면, 다른 프로세스에게 읽기 혹은 쓰기를 공유하겠다는 것을 나타낸다. 만약 FileShare.None 이면, 다른 프로세스는 그 파일을 엑세스할 수 없다.
파일 오픈이 요청되면, 시스템은 그 파일의 FileAccess 요청이 이미 그 파일을 오픈한 다른 프로세스들의 FileShare와 서로 허용되는지를 체크하게 된다. 예를 들어, 다른 3개의 프로세스가 이미 파일을 FileAccess.Read로 오픈했고 읽기/쓰기를 허용했다면, 새 쓰레드는 읽기 모드로 FileShare.Read 혹은 FileShare.ReadWrite을 사용해서 파일을 오픈할 수 있다. 하지만, 이미 오픈된 파일이 FileAccess.Read와 FileShare.Read로 설정된 경우, 읽기만 허용했기 때문에 FileAccess.Write 모드로 파일을 오픈할 수는 없다. 파일 오픈에 있어 누가 먼저 파일을 어떤 모드로 오픈하고 공유했는가가 중요한 역활을 한다.
아래 예제는 FileAccess.Read, FileShare.Read를 사용한 코드로서 파일을 읽기 모드로 열고, 다른 프로세스도 읽을 수 있도록 허용한 코드이다. 만약 복수 개의 쓰레드가 동시에 이 메서드를 사용한다면, 파일을 동시에 멀티쓰레드로 읽는 것이 가능하다.
파일 오픈이 요청되면, 시스템은 그 파일의 FileAccess 요청이 이미 그 파일을 오픈한 다른 프로세스들의 FileShare와 서로 허용되는지를 체크하게 된다. 예를 들어, 다른 3개의 프로세스가 이미 파일을 FileAccess.Read로 오픈했고 읽기/쓰기를 허용했다면, 새 쓰레드는 읽기 모드로 FileShare.Read 혹은 FileShare.ReadWrite을 사용해서 파일을 오픈할 수 있다. 하지만, 이미 오픈된 파일이 FileAccess.Read와 FileShare.Read로 설정된 경우, 읽기만 허용했기 때문에 FileAccess.Write 모드로 파일을 오픈할 수는 없다. 파일 오픈에 있어 누가 먼저 파일을 어떤 모드로 오픈하고 공유했는가가 중요한 역활을 한다.
아래 예제는 FileAccess.Read, FileShare.Read를 사용한 코드로서 파일을 읽기 모드로 열고, 다른 프로세스도 읽을 수 있도록 허용한 코드이다. 만약 복수 개의 쓰레드가 동시에 이 메서드를 사용한다면, 파일을 동시에 멀티쓰레드로 읽는 것이 가능하다.