FileShare 매 거 진 사용 소결(파일 읽 기 및 쓰기 자물쇠)
7158 단어 FileShare매 거읽 기와 쓰기 자물쇠
1:어떤 파일 에 내용 을 기록 하고 다른 프로 세 스/스 레 드/후속 작업 에서 파일 내용 을 읽 을 때 이상 을 보고 합 니 다.알림 System.IO.IOException:파일"XXX"는 다른 프로 세 스에 서 사용 되 고 있 기 때문에 이 프로 세 스 는 이 파일 에 접근 할 수 없습니다.
2:한 파일 을 작업 한 후(읽 기/쓰기)추가 하려 면 System.IO.IOException:파일"XXX"를 다른 프로 세 스에 서 사용 하고 있 기 때문에 이 프로 세 스 는 이 파일 에 접근 할 수 없습니다.다음 문 제 는 1 과 비슷 하 다.
3:파일 을 삭제 하려 면 System.IO.IOException:파일"XXX"를 다른 프로 세 스에 서 사용 하고 있 기 때문에 이 프로 세 스 는 이 파일 에 접근 할 수 없습니다.
이런 것들 을 보면 경험 이 있 는 학생 들 은 자원 이 방출 되 지 않 았 다 고 말 할 수 있 지만 다음 과 같은 가능성 도 있다.우 리 는 파일 에 대한 작업 이 매우 빈번 하기 때문에 특정한 작업 클래스/구성 요 소 를 써 서 파일 간 의 작업 을 유지 하고 특정한 시간 을 알 아야 끝 납 니 다.흔히 볼 수 있 는 로 그 는 프로그램 이 시 작 될 때 까지 로 그 를 쓰기 시작 합 니 다.그러나 파일 을 조작 하기 위해 서 는 현재 로그 나 모든 로 그 를 볼 수 있 는 로그 뷰 어 를 제공 해 야 하 는 특수 한 작업(읽 기/쓰기/삭제)이 필요 합 니 다.이 럴 때 이상 의 문제 가 발생 하 는 것 을 피 할 수 없습니다
static void WriteFile(FileMode fileMode, FileAccess fileAccess, FileShare fileShare)
{
Console.WriteLine("please input your content.");
var content = Console.ReadLine();
FileStream fs = new FileStream(FILEPATH, fileMode, fileAccess, fileShare);
var buffer = Encoding.Default.GetBytes(content);
fs.Write(buffer, 0, buffer.Length);
fs.Flush();
}
首先,我声明了一个写文件方法,并调用它,它将我输入的内容写入指定的文件当中。
WriteFile(FileMode.Create, FileAccess.Write, FileShare.Read);
Console.ReadKey();
그러나 파일 쓰기 작업 이 끝 난 후에 나 는 파일 흐름 의 자원 을 방출 하지 않 았 다.그래서 이 때 파일 에 자 물 쇠 를 만 들 수 있 습 니 다.나 는 windows 에서 그것 을 삭제 하려 고 시도 했다.
분명히 나 는 이 파일 을 삭제 할 수 없 었 다.그 다음 에 나 는 그것 을 읽 으 려 고 시도 했다
static void ReadFile(FileAccess fileAccess, FileShare fileShare)
{
FileStream fs = new FileStream(FILEPATH, FileMode.Open, fileAccess, fileShare);
var buffer = new byte[fs.Length];
fs.Position = 0;
fs.Read(buffer, 0, buffer.Length);
Console.WriteLine(Encoding.Default.GetString(buffer));
}
나 는 파일 을 읽 는 방법 을 실 현 했 고 그것 을 호출 했다
WriteFile(FileMode.Create, FileAccess.Write, FileShare.Read);
ReadFile(FileAccess.Read, FileShare.Read);
모든 것 이 간단 합 니 다.방문 모드 는 읽 기 전용 입 니 다.그러면 위의 자물쇠 와 충돌 하지 않 을 것 입 니 다!그러나 결 과 는 우리 가 예상 한 것 처럼 그렇게 되 지 않 았 다.왜 방문 할 수 없다 는 것 을 알 렸 을 까?돌 이 켜 보면 앞에서 나 는 windows 의 수첩 으로 이 파일 을 열 었 다.파일 이 잠 겨 있다 는 것 을 알 리 지 않 았 고 나 도 확실히 접근 할 수 있 었 다.그런데 왜 프로그램 에 도착 하면 접근 할 수 없 었 을 까?어쩌면 우 리 는 FileMode,FileAccess,FileShare 라 는 세 가지 매 거 진 에 중점 을 두 어야 할 지도 모른다.
FileMode
MSDN 의 설명 은 운영 체제 가 파일 을 여 는 방식 을 지정 하 는 것 입 니 다.이것 은 설명 이 필요 없 을 것 같 습 니 다.여러분 들 이 평소에 많이 사용 하 셨 을 것 같 습 니 다.MSDN 의 표 도 각 매 거 진 값 의 역할 을 잘 논술 하 였 으 니 나 는 설명 하지 않 겠 다.
FileAccess
파일 읽 기,쓰기,읽 기/쓰기 접근 권한 에 사용 할 상 수 를 정의 합 니 다.
이 매 거 진 것 도 많이 썼 고 묘사 도 통속 적 이 고 알 기 쉬 워 서 더 이상 설명 하기 가 곤란 합 니 다.^ ^!
FileShare
이 매 거 진 유형 은 모두 가 비교적 낯 설 것 이 라 고 믿 습 니 다.심지어 친구 들 도 보지 못 했 습 니 다.(부 끄 러 운 것 은 저도 그것 을 알 게 된 지 얼마 되 지 않 았 습 니 다)낯 설 고 낯 설 지만 그의 작용력 도 과소평가 할 수 없습니다.다만 Net 은 우 리 를 도와 그것 을 잘 포장 해서 우 리 는 그것 이 중요 한 역할 이 아니 라 고 생각 합 니 다.좋아,주제 에 들 어가 자!
다른 FileStream 대상 이 같은 파일 에 접근 할 수 있 는 형식 을 제어 하 는 상수 가 포함 되 어 있 습 니 다.이 말 이 무슨 뜻 이 죠?솔직히 말 해서,나 는 지금 한 마디 를 보 는 것 이 여전히 매우 복잡 하 다.많은 학우 들 이 보 는 것 도 안개 라 고 믿는다.괜찮아,우리 먼저 뛰 어 넘 자!
멤버 설명 을 보 니 FileAccess 와 비슷 하 다.잠시 베일 을 벗 겨 보 자!
FileShare.Read
말 그대로 파일 을 먼저 열 고(자원 이 방출 되 지 않 았 음)파일 을 읽 는 방식 으로 파일 에 접근 할 수 없 는 이상 을 던 지지 않 는 다 는 뜻 으로 이해 할 수 있 습 니 다.방금 실현 한 방법 을 이용 하여 쉽게 이 실험 을 완성 할 수 있다.
이것 은 무슨 일 입 니까?다 읽 은 것 으로 설정 되 어 있 지 않 습 니까?파일 을 읽 을 때 만 읽 기 공유 로 설정 할 수 있 습 니 다.다시 한 번 시도 해 보 겠 습 니 다.
이번 에는 처음으로 자원 을 방출 하지 않 았 을 때 다시 읽 을 수 있 습 니 다.공유 만 읽 고 파일 을 쓸 수 있 는 지 다시 한번 시도 해 보 겠 습 니 다
WriteFile(FileMode.Create, FileAccess.Write, FileShare.Read);
ReadFile(FileAccess.Read, FileShare.Read);
먼저 파일 의 내용 을 정확하게 읽 었 으 나,내 가 어떤 내용 을 쓰 려 고 시 도 했 을 때 또 잘못 보고 했다.그렇다면 이상 의 실험 에 따 르 면 이 읽 기 전용 공 유 는 파일 을 연속 으로 읽 어야 만 유효 하 다 는 것 을 알 수 있 습 니 다!
FileShare.Write
Read 의 경험 을 결합 하면 파일 을 쓸 때 공유 방식 을 Write 로 설정 해 야 파일 을 계속 쓸 수 있 고 그렇지 않 으 면 이상 을 던 질 수 있다 는 뜻 으로 이해 할 수 있 습 니 다.여기 가 재 미 있 을 때 Write 를 설정 하면 만능 Window 메모 장 도 파일 을 열 수 없습니다.
FileShare.ReadWrite
이상 의 경험 을 가지 고 말 그대로 이해 하면 이 ReadWrite 는 반드시 Read 와 Write 의 특성 을 결합 시 켰 다 고 볼 수 있 습 니 다.그럼 도대체 얘 가 무슨 소 용이 있 는 거 야?위 에서 우 리 는 파일 을 읽 을 때 Read 공 유 를 설정 하면 계속 읽 을 수 있 고 쓸 수 없 으 며,파일 을 쓸 때 Write 공 유 를 설정 하면 계속 쓸 수 있 고 읽 을 수 없다 는 것 을 알 고 있 습 니 다.그러나 우리 가 쓰기 공 유 를 설정 한 후에 파일 을 읽 으 려 고 할 때 어떻게 합 니까?자원 을 먼저 방출 하고 다시 불 러 올 수 밖 에 없 나 요?필요 없어,ReadWrite 는 이 때문에 태 어 난 거 야.
ReadFile(FileAccess.Read, FileShare.Read);
ReadFile(FileAccess.Read, FileShare.Read);
그러나 파일 을 쓸 때 공 유 를 Write 로 설정 하 는 것 은 허용 되 지 않 습 니 다.그렇지 않 으 면 파일 을 읽 을 때 ReadWrite 를 사용 하면 유효 하지 않 지만 모두 ReadWrite 로 설정 할 수 있 습 니 다.이것 은 반드시 많은 일상 개발 중의 번 뇌 를 해결 할 수 있 을 것 이다.
FileShare.None/FileShare.Delete
위의 경험 이 있 으 면 이 두 가 지 를 쉽게 이해 할 수 있 을 것 이 라 고 믿 습 니 다.None 는 후속 작업 을 허용 하지 않 고 Delete 는 나중에 삭제 작업 을 할 수 있 도록 합 니 다.
블랙박스 안의 내용
파일 작업 에 있어 서 우리 가 평소에 사용 하 는 것 은 다음 과 같은 몇 가지 일 수 있 습 니 다
ReadFile(FileAccess.Read, FileShare.Read);
WriteFile(FileMode.Create, FileAccess.Write, FileShare.Read);
실제로 그들 도 내부 에서 FileMode/FileAccess/FileShare 를 초기 화 했 습 니 다.예 를 들 어 File 의 정적 방법 은 마지막 에 하나 가 생 성 됩 니 다.하나의 Stream 인 스 턴 스,그 중에서 개인 적 인 방법 을 호출 하 였 습 니 다.
막바지
이제 우 리 는 알 게 되 었 습 니 다.사실/FileShare 는 파일 흐름 을 제어 하 는'접근 권한'입 니 다.물론 이것 은 입문 파일 작업 일 뿐 입 니 다.스스로 필 기 를 했 고 여러분 에 게 도움 을 주 었 으 면 합 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
우 객 망 - 우 객 홀 리 데 이 단체 전 8최소 몇 개의 신호 탑 을 만들어 야 모든 잔디 에 신호 가 있 는 지 물 어보 세 요.사고방식: 욕심, 모든 잎 사 귀 노드 를 고려 하면 우 리 는 발견 할 수 있다.잎 노드 를 덮 으 려 면 가장 좋 은 방안 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.