2015-01-28 4 views
0

폴더에 파일 워처 설정이 있습니다. 하위 폴더가 생성 될 때마다 이벤트가 발생하여 새 폴더에있는 파일을 가지고 작업을 진행하려고합니다. 문제는, 거기에 파일의 X 번호가 복사 된/새 폴더에 생성 된 및 더 이상 새 파일을 시간의 합리적인 금액 내에서 생성되는 것을 알기 전까지 코드의 나머지 부분을 실행하고 싶지 않아 30 초 말해 수 있습니다. . 당신은 LastWriteTime을 포함 System.IO.DirectoryInfo을 사용할 수 있습니다C# 디렉토리에 쓰기가 완료되었는지 확인하는 방법

void fsw_Created(object sender, System.IO.FileSystemEventArgs e) //Event 

handler for directory created 
{ 
     //Wait until no new file activity in the newly created for 30 secs 
     //Do stuff 
} 
+0

는 소리, 모든 파일이 새 디렉토리에 작성 완료 시점을 감지하는 데 사용

당신은 다음과 같이 사용할 수 있습니다. – gknicker

답변

0

: 여기

내가 할 노력하고 그 중 일부 의사 코드입니다. 당신은 또한 파일 생성 핸들러를 갖고 싶어처럼

handler for directory created 
{ 
     string YourFolder = @"D:\CPT\Folder\"; // just en example 
     DirectoryInfo di1 = new DirectoryInfo(YourFolder); 
     DateTime dt1 = di1.LastWriteTime; // that is your base folder write time 
     Console.WriteLine(dt1); 
     Stopwatch sw = new Stopwatch(); //it's from System.Diagnostics 
     sw.Restart(); 
     int secondWithoutAccess = 0; 
     do 
     { 
      if (sw.ElapsedMilliseconds > 1000) 
      { 
      //You must create new instance of Directory info every second 
      DirectoryInfo di2 = new DirectoryInfo(YourFolder); 
      DateTime dt2 = di2.LastWriteTime; 
      Console.WriteLine(dt2); 
      //if your base lastWriteTime is lower than 
       if (dt2 > dt1) 
       { 
        secondWithoutAccess = 0; 
        dt1 = dt2; // You must write last write time to proper compare 
       } 
       else secondWithoutAccess++; 
      sw.Restart(); // in all cases You restart timer 
      } 
     } 
     while (secondWithoutAccess < 30); // when 30 sec without access 
     Console.WriteLine("Files in folder didn't change for more than 30 sec"); 

     // do rest of Your stuff here 
    } 
+0

대신 [directoryInfo.Refresh()'] (https://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.refresh (v = vs.110) .aspx)를 호출 할 수 있습니다. 새 인스턴스를 만듭니다. 변수 이름을 검토 할 수도 있습니다. – CodeCaster

+0

이벤트 처리기가 별도의 스레드에서 시작합니까? 새 폴더가 동시에 생성되거나 배경 작업자에게 이벤트 처리기를 넣어야하는 경우 작동합니까? –