2010-08-09 3 views
8

나는 여러 가지 "솔루션"을 웹 사이트에서 발견했지만 그 중 어떤 것도이 법안에 맞지 않습니다.C# : FileSystemWatcher를 사용하여 파일을 복사하거나 이동

내가 찾고있는 것은 응용 프로그램에서 새 파일 (생성, 이동 또는 복사본)을위한 폴더를 모니터링하고 해당 객체에 대한 작업을 수행하도록하는 것입니다. 그 시나리오에서 FileSystemWatcher 클래스를 사용하여이 작업을 수행했습니다.

문제는 FileSystemWatcher.Created 이벤트 파일이 전체 파일이 만들어지기 전에 발생한다는 것입니다 (특히 큰 파일의 복사본을 통해 볼 수 있음).

파일 생성이 끝날 때이 이벤트가 시작되는 것과 반대되는 방법이 있습니까? FileSystemWatcher.NofityFilter 속성의 다양한 조합을 시도해 보았습니다. 성공하지 못했습니다.

미리 감사드립니다. :)

답변

6

: 파일 복사 완료되면 변경된 일정뿐만 아니라 발생합니다 (후 해고 생성) 때문에 내가 여기에 무엇을 읽고에서

자세한 내용 (크기 증가 파일의 원인) 이 상황에 대한 솔루션을 제공합니다.

  1. 파일 작성자와 함께 작업하고 파일의 이름을 바꾸는 방법을 사용할 수있는 경우. EG. 파일을 만들 때 __Name_으로 만들고이 프로세스의 끝에는 이름으로 이름을 바꿉니다. 그러면 이벤트가 시작되고 전체 파일이 생성됩니다.

  2. 트리거가 실행되면 파일에 읽기 전용 잠금을 사용할 수 있는지 확인하십시오. 그렇게 할 수 있으면 쓰기 작업이 파일에 완료되었습니다.

당신은 아마도 당신의 변경 이벤트에 # 2 같은 것을 통합 할 수있는 한 다음 결과를 얻을 수 있습니다 (I 또 다른 질문 Keep settings in sync between forms application and windows service (or any n-tier, really)이에 대해 뭔가를 썼다).

1

음 재미있는 문제. 큰 파일을 보면서 그 물건을 사용하지 않았습니다. 약간의 검색을했는데 한 가지 해결책은 Changed 이벤트를 모니터링하는 것입니다. 나는 몇 가지를 사용했다 http://social.msdn.microsoft.com/forums/en-US/vblanguage/thread/f84bb7c8-b7d5-44da-b0f3-6d1a70415d11/

+0

하지만 불행히도 이것에 대한 더 우아한 해결책을 찾지 못한 행운이 없었습니다. (적어도 아직 알고 싶습니다.) –

0

파일을 만든 후 파일 닫기를 추적해야하며 FileSystemWatcher를 사용하는 것이 가능하지 않을 수도 있습니다. FileSystemWatcher로 솔루션을 찾지 못하면 CallbackFilter 제품을 살펴보면 모든 작업을 실시간으로 추적 할 수 있습니다.

+0

참고 : Eugene은 CallbackFilter를 작성한 회사의 CTO입니다. – Crisfole

+0

@ChristopherPfohl 오래된 게시물 - 나는 새로운 규칙에 따라 그것을 업데이 트했습니다 –

+0

감사 :) 공개는 많은 사람들을 위해 귀하의 제품을 쉽게 사용하기로 결정합니다. – Crisfole

1

나는 당신에게 말하려고하는 것이 우아 해 보이지 않는다는 것을 알고 있습니다. 다른 장소에서 도착한 파일도 모니터링해야했는데 일부 파일은 크기가 크고 크기가 작았습니다. 우리는 FileSystemWatcher가이 목적을 위해 신뢰할 수 없다는 것을 알았습니다. 100 % 확실하길 원한다면 Timer 클래스와 Elapsed 이벤트를 사용하여 한 번씩 확인할 수 있습니다.

+0

안녕하세요 보리스, 어떤면에서 신뢰할 수 없었습니까? – nokturnal

+1

우리는 FileSystemWatcher를 사용하여 다른 시스템에서 파일 생성을 모니터링합니다. 미리 정의 된 이름으로 특정 시간에 파일을 생성해야했습니다. 해당 시간대 내에 파일이 생성되지 않으면 모니터링 경보를 모니터링하십시오. 많은 경우 FileSystemWatcher가 "누락"되었거나 파일이 수정되어 많은 "거짓"경고가 발생했습니다. 웹에서 검색 한 결과 문제가 다른 사람들에게도 공통적이라는 것을 알게되었습니다. –

관련 문제