일부 타사 서버에서 파일을 다운로드하고 있으므로 각 파일에 대해 다운로드 완료 이벤트 (서버에서 적어도)를 얻을 수있는 방법이 없습니다. 약 20 개의 파일이 있습니다. 개별 파일이 다운로드 되 자마자 다른 위치로 복사해야합니다 (가능한 한 빨리해야합니다).이벤트를받은 후 1 초 동안 대처 파일을 지연시키는 방법은 무엇입니까?
새 파일이 도착했는지 확인하려면 ReadDirectoryChanges
API를 사용하고 있습니다.
while (ReadDirectoryChangesW(
hDir, /* handle to directory */
&buffer, /* read results buffer */
sizeof(buffer), /* length of buffer */
TRUE, /* monitoring option */
FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_FILE_NAME,
&bytesReturned, /* bytes returned */
NULL, /* overlapped buffer */
NULL)) /* completion routine */
{
//do file copy after download completes
}
이제 다운로드가 완료 될 때 확신 할 수없는 문제가 있습니다. ReadDirectoryChanges
에서 여러 이벤트가 발생합니다. 이벤트가 발생하면 파일에 이벤트가 기록됩니다.
이벤트가 발생하는 특정 파일에 대한 다운로드가 완료되었음을 알 수있는 방법이 있습니까?
해결 방법으로, 우리는 복사를 시작하기 전에 1 초 동안 기다리기로 결정했습니다. 하지만 1 초가 지나면 다른 알림을 받으면 다른 1 초를 기다려야합니다.
우리는 별도의 스레드에서 파일 복사를 시작하고 여러 파일 복사가 동시에 발생할 수 있습니다.
이제 1 초를 추적하는 데 사용할 수있는 데이터 구조가 있고 그 사이에 다른 이벤트가 발생하면 1 초로 다시 시작해야합니까? 처음에는 우선 순위 대기열을 생각했지만 시간 제한이 발생했는지 여부를 10ms마다 확인해야합니다. 또한 여러 요소가 우선 순위 큐에 추가되면 파일을 다시 복사 할 수있는 문제가 있습니다.
아마도이 문제를 해결하기위한 나의 방법은 완전히 터무니 없습니다. 나는 더 나은 접근 방식에 개방적이다.
어쩌면 파일 잠금 상태를 확인하여 다운로드가 완료되었는지 확인할 수 있습니다. 지연에 대한 은 WaitableTimer와 비슷할 것입니다. –