2017-04-06 9 views
0

5 분마다 파일을 읽는 응용 프로그램이 있습니다. 프로그램이 시작되면 파일을 읽고 완료 되 자마자 타이머를 시작합니다. 5 분이 지나면 타이머가 멈추고 파일을 다시 읽습니다.파일이 C#에서 제 시간에 수정되었는지 확인하십시오.

해당 기간에 파일이 수정되었는지 확인하고 싶습니다. 그렇지 않은 경우 파일을 읽지 않습니다.

현재, 나는 다음과 같은 코드가 있습니다 :

DateTime dtFile = File.GetLastWriteTime(file); 
DateTime now = DateTime.Now; 

long sub = (long)(now - dtFile).TotalMilliseconds; 

if(sub <= timer1.Interval) 
{ 
    // the code goes here 
} 

내 문제는 내 프로세스, 프로세스는 몇 분 정도 걸릴 수 있습니다 읽을 수있는 여러 개의 파일을 가지고 있다는 것입니다.

따라서 첫 번째 파일이 오전 10시에 실행되고 모든 파일 처리가 오전 10:05에 종료되면 오전 10:05에 타이머가 시작됩니다. 그래서 오전 10시 10 분에 타이머가 멈 춥니 다.

오전 10:02에 첫 번째 읽기 파일이 수정 된 경우 오전 10:05에 전체 처리가 끝날 때 타이머가 시작 되었기 때문에 읽지 않습니다. 따라서 수정 된 파일은 오전 10시 2 분에 기간이 만료됩니다.

+5

5 분마다 파일을 폴링하는 대신 [FileSystemWatcher] (https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher (v = vs. 110) .aspx) 클래스. – vyrp

+0

잠재 고객이 전적으로 남성 인 것으로 가정하지 마십시오. 일부 독자에게 배타적 영향을 미칠 수 있습니다. 감사. – halfer

답변

0

그냥 한 가지 방법이지만이 방법을 사용하는 것이 좋습니다. 다음과 같은 속성이 포함 된 새로운 클래스 만들기 : - 파일 에 공공 문자열, 경로에 대한 - 를 경로, 시작을 정의하는 생성자를 만들 타이머 객체 지금

- 날짜 시간을, 마지막 검사 시간 를 저장 시간을 정의하고 활성화 할 수 있습니다.

응용 프로그램 시작시 또는 각 파일에 대해 하나의 개체를 즉시 instatiate 할 수있을 때마다. 각 개체는 이제 독립적 인 타이머를 갖게되어 더 이상 부딪히지 않게됩니다.

+0

도움을 많이 주셔서 감사합니다. 파일 경로에서 문자열을 포함하는 클래스를 만들고 마지막 수정 날짜가있는 Datetime을 만들 것을 생각했습니다. 그런 다음 일반 타이머가 다시 실행되면 파일의 마지막 수정이 클래스에있는 날짜와 다른지 확인합니다. 작동할까요? 이 문제는 100 개 이상의 파일에 대한 클래스를 인스턴스화합니다. 응용 프로그램의 무게가 결국 끝날 것이기 때문입니다. –