2014-10-15 2 views
0

디렉토리에서 새 파일을 계속 찾는 프로그램을 작성 중입니다. 각 파일에서 데이터를 추출하고 일부 처리를 수행하면 파일이 모든 스캔 된 파일이 들어있는 다른 디렉토리로 이동합니다.파일 작업 충돌

상상해보십시오. 내 프로그램이 실행되는 동안 스캔 한 디렉토리에 새 파일을 복사하고 있습니다. 복사가 완료되지 않은 파일을 처리하고 (예기치 않은 결과를 낼 수 있습니까?) 또는 시스템에 의해 잠겨 있습니까?

이제 프로그램의 두 인스턴스가 서로 다른 두 컴퓨터에서 실행되어 동일한 폴더를 계속 스캔한다고 가정합니다. 두 인스턴스가 동일한 파일을 이동하려고하면 어떤 일이 발생할 수 있습니까?

도움 주셔서 감사합니다.

+0

이것은 매우 부정확합니다. "복사"를 정의하십시오. 읽거나 쓰고 있니? 복사에는 소스 읽기와 대상 쓰기가 포함됩니다. 어떤 공유 모드를 사용하고 있습니까? 여러 인스턴스가 동기화없이 동일한 파일에서 동시에 작동 할 수 있도록 허용합니까? 이 질문은 맨 앞에 표시됩니다. 해결책 (가장 잘 모호한 소리)에 대해 묻는 대신 원래의 문제를 해결하는 방법을 물어야합니다. –

+3

이벤트를 디렉토리 변경 사항에 연결하고 변경 사항을 폴링 할 필요가 없습니다. –

+0

@LURD - 이론적으로. IRL 그것은 그렇게 단순하지 않습니다. 기본 시스템은 폴링을 통해 작동하고 일부 (드물지 만) 드문 경우에는 약간의 변경 사항이 누락됩니다. – mg30rg

답변

3

나는 똑같은 일을하는 프로젝트를 가지고있다. 또 다른 응용 프로그램은 피드에서 데이터를 받고 폴더에 파일을 쓰는 것입니다. 내 응용 프로그램은 파일을 열고, 어떤 식 으로든 그들을 연기하고, 다른 폴더에 쓰고 삭제합니다.

내가 처리를 수행하고 삭제 단순히 같은를 열 수 있습니다 응용 프로그램에서 사용되는 전략 :

TFileStream.Create(AFileName, fmOpenRead OR fmShareDenyWrite); 

하면 또 다른 프로세스에 의해 작성되고 개방되는 파일, 위의 의지 실패하고 후속 반복에서 성공적으로 열릴 수 있습니다.

+0

고마워요, 그게 내가 찾고 있던 것입니다. – RindekMalek