디렉토리에 파일을 작성하자 마자로드해야하는 프로그램이 있습니다. 필자는 FileSystemWatcher를 통해 디렉토리 변경을 알립니다. 변경된 이벤트를 확인하기보다는 파일을 나열하고 찾은 모든 파일을 처리하기 시작합니다. 문제는 일부 파일, (200)에 대한 1, 프로그램이 모두 0을 읽을 수 있다는 것입니다쓰기 직후 파일 읽기 모두 0이됩니다. (.net)
try {
fs = fi.Open(FileMode.Open, FileAccess.ReadWrite,
FileShare.None);
message = new byte[fs.Length];
int br = fs.Read(message, 0, (int)fi.Length);
}
catch (Exception e) {
// I'll get it next time around
return;
}
finally {
if (fs != null)
fs.Close();
}
:
여전히 내가 좋아하는 코드가 기록되는 파일을 읽으려고 방지합니다. 파일 길이는 정확하지만 내용은 모두 0 바이트로 표시됩니다. 후자의 파일을 검사 할 때 실제 정확한 데이터가 포함되어 있다는 것을 알게됩니다. 파일을 여는 방식으로 파일에 대한 조숙 한 액세스를 막을 수 있다고 생각했습니다.
DOS 명령 'copy InFile_0 * dropdir'(실행 당 약 100 개 파일)로 디렉토리에 파일을 복사하여 테스트하고 있습니다.이 명령은 사본을 두 단계로 수행합니다. 1) 공간을 할당하고 2) 공간을 채우고 내 프로그램이 가끔씩 두 곳의 중간에서 뛰게됩니다.
신뢰할 수있는 코드 작성 방법에 대한 아이디어가 있으십니까?
업데이트 : 필자는 쓰기 프로그램을 제어 할 수 없습니다. 아무 것도 될 수 있습니다. 방어적인 코드를 작성해야하는 것 같습니다.
팁 : 예외에 대한 로깅을 추가하십시오. 조용히 실패하지 마십시오. – Amy
파일에 잠금을 설정하지 않은 프로그램을 사용하고 있습니다. 예를 들어, C 프로그램의 경우 fopen()은 모든 프로그램이 파일을 열어 놓은 상태에서 읽고 쓸 수있게합니다."잠시 기다리십시오"를 넘어서서이기는 많은 방법이 아닙니다. –