네트워크 공유에 저장된 파일을 읽는 프로세스가 많습니다. 원래 한 프로세스 만 파일을 읽을 수 있었고 다른 모든 프로세스는 예외를 던질 수있었습니다. 때로는 여러 프로세스가 여전히 파일을 액세스 할 수 없기 때문에, 그러나 여전히 문제가있는 것,여러 프로세스가 동일한 파일을 읽는 올바른 방법은 무엇입니까?
using (StreamReader fileStreamReader = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)))
{
content = fileStreamReader.ReadToEnd();
}
이 여러 프로세스가 동일한 파일을 읽을 수 있도록 : 그 처리하는 다음 코드를 구현했습니다. 그러나 나중에 파일을 사용하지 않을 때 다시 돌아가서 잘 열 수 있습니다. 지금 당장은 무작위 지연을 구현 한 재시도 동작이 있습니다. 이런 식으로하는 것은 다소 기발한 것 같습니다. 그래서 더 좋은 방법은 무엇일까요?
이것은 이상한 부분입니다. 파일 IO가 아닌 예외는 CommStudio라고하는 라이브러리에서 가져온 것입니다. 간단히 말해, 파일을 문자열로 덤프하고 약간 수정 한 다음 메모리 스트림으로 덤프하고 ymodem을 통해 rs232에 제공합니다. 예외는 원격 시스템이 취소되었음을 알려줍니다. 데이터를 가져 오는 장치는 전송 오류가 있음을보고합니다. 이는 일반적으로 불완전한/빈 파일이 수신되었음을 나타냅니다.
일반적으로 나는이 라이브러리를 비난 하겠지만 책상 테스트와 파일 액세스 프로세스가 하나 일 때 완벽하게 작동합니다. 실제로 일관성있는 것으로 보이는 유일한 점은 여러 프로세스가 파일에 액세스 할 때 실패 할 가능성이 크다는 것입니다.
네트워크 공유에서 잠금은 피타가 될 수 있습니다. 어떤 네트워크 공유 (윈도우 버전, 유닉스)를 사용하고 있고 어떤 예외가 있는지 말할 수 있습니까? – stmax
클라이언트는 XP를 사용하고 있습니다. 서버는 Windows Server입니다.하지만 2008 년은 그렇다고 생각합니다. 예외에 대한 수정 사항을 게시하고 있습니다. – MGSoto
항상 동일한 파일을 읽고 있습니까? 파일을 읽은 후 올바르게 읽었는지 확인하기 위해 체크섬 (예 : SHA1 클래스 참조)을 계산할 수 있습니다. 체크섬이 맞으면 장치에서 오류가 발생했으며 네트워크 공유에서 읽는 것이 아닙니다. – stmax