2009-04-17 3 views
1

두 가지 응용 프로그램이 있습니다. 첫 번째 응용 프로그램은 해당 컴퓨터에 원격으로 연결되어 있으며 (아무런 연락도받지 않음) 네트워크 (LAN)를 통해 큰 파일을 만듭니다. 나는이 과정을 통제 할 수 없으며 언제 일어나는 지 알지 못한다. 이것이 내가해야 할 일입니다. 어떤 식 으로든이를 추가, 변경 또는 변경할 수 없습니다.파일 열기 (생성) 감지로 프로세스 동기화

두 번째 응용 프로그램은 나에게 작성되었으며이 파일을 찾으면 처리합니다. 이 앱은 5 분마다 실행되도록 예약됩니다.

내 응용 프로그램이 처리를 시도 할 때 파일이 작성되는 과정에서 불완전한 처리 및/또는 기타 오류가 발생할 수있는 상황이 발생할 수 있으므로 파일이 완전히 작성되었는지 감지해야합니다. 처리를 시작하십시오.

OpenFile()을 사용하여 읽기/쓰기 잠금 액세스를 요청할 수 있습니다. 오류는 파일이 작성 중임을 표시합니다.

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

인 watcher하지만 내가 (나중에 NT와) 창에 대해 생각하지 않은 우아한 방법이 의심

답변

0

완전히 hackish 방법이 될 것이다 나는 아마도 파일 시스템으로 영리한 뭔가를 할 수 원격 컴퓨터에 API 후크를 설치하여 파일 닫기를 실행하면 프로그램을 시작하거나 완료되었음을 알리는 알림을 보냅니다.

+0

처리 원격 처리 (원격 장치)에서 액세스 가능하지 않다. –

2

표준 솔루션은 작성자가 임시 파일에 쓰고 파일을 완료 한 후에 파일의 이름을 바꾸는 것입니다.

그런 식으로 독자 (귀하의 앱)는 파일 완성시에만 볼 수 있습니다.

+0

Unfortunatly 나는 그것을 구현하는 작가 (원격 프로세스)에 대한 액세스 권한이 없습니다. –

+0

예, 게시물을 업데이트 한 것으로 나타났습니다 ... 약간의 OTT 말씀 드려야합니다! –

+0

불쾌감을 없애고, 명확성을 강조합니다. –

1

이전에는 네트워크상의 파일 (* NIX 응용 프로그램과 Novell 파일 서버를 통한 Windows 응용 프로그램 사이)을 사용하여 통신하는 소프트웨어를 작성해야했습니다. 이렇게하기 위해 우리는 항상 데이터 파일 작성자가 데이터 쓰기를 완료 할 때 여분의 핸드 셰이크 파일 (빈 파일)을 만들 것을 확신했습니다. 응용 프로그램에서 핸드 셰이크 파일을 폴링하고 핸드 셰이크 파일이있는 경우 데이터 파일을 읽습니다. 우리 애플리케이션이 데이터 읽기를 끝내면 핸드 셰이크 파일이 삭제됩니다. 핸드 셰이크 파일이 존재하는 한 데이터 파일을 건드리지 않은 공급자가 핸드 셰이크 파일을 모니터링했습니다.

그러나 대부분의 경우 데이터 제공 업체는 애플리케이션을 기꺼이 수정하려고했습니다. 나는 신뢰할 수있는 방법으로 공급자로부터 신호를 얻는 유일한 방법이라고 생각한다.

+0

나는 소원합니다. 불행히도 불가능합니다. –

+1

예, 핸드 셰이크 파일이 SHA1 파일 인 경우 데이터 전송 문제가 발생했는지 여부도 알 수 있습니다. – lothar

+0

하지만 다른 응용 프로그램이 해시를 파일에 쓰는 동안 파일을 읽을 수 있기 때문에 SHA1을 보호하는 핸드 셰이크 파일이 필요합니다. – rve

3

FileSystemWatcher 또는 ReadDirectoryChanges을 통한 시스템 감시자 해결책이 가장 좋다고 생각합니다. CodeProject에서도 this tutorial을 확인할 수 있습니다. 어쨌든 더 우아 할 수 있을까요?

2

다른 답변 : 나는 비슷한 것을 한 다른 프로젝트를 갑자기 생각해 냈습니다. 내 응용 프로그램은 단지 파일을 성공적으로 열 때까지 OpenFile()OF_SHARE_EXCLUSIVE (필자는 생각합니다.)이라고 사용했습니다. 이 경우에는 내 응용 프로그램이 원격 응용 프로그램에서 작성한 파일에 내 응용 프로그램과 같은 컴퓨터의 공유에 액세스했기 때문에 제대로 작동합니다. 필자는 파일 서버의 파일로 테스트 한 적이 없지만 제대로 작동 할 수 있습니다. 그러나 파일 잠금은 원격 파일과 함께 사용될 때 항상 신뢰할만한 것은 아닙니다.

0

많은 다른 사람들이 이미 정당한 방법으로 지적했듯이 여분의 악수가 될 것입니다. 이것이 불가능한 것 같아서 나는 다음을 할 것입니다.

  • 데몬과 같이 영구적으로 실행되도록 응용 프로그램을 작성하십시오.
  • 파일에 대한 확인하고 당신은
    • 은 더 이상 당신이 전송을 끝낼 결정 후
    • 파일의 이름을 변경 (예 : 30초) 지정된 시간 동안 성장하지 않을 때까지 크기의 모니터 발견하면
    • 불행히도 바뀐 파일
+0

재미있는 아이디어가 있습니다. 난 당신이 크기보다는 OpenFile()보다 신뢰할 수 있기 때문에 사용하고 확인하려는 가정? –

+0

@mmw는 오타를 수정했습니다 :-) – lothar

관련 문제