I’m using ReadDirectoryChangesW to spy a folder, if I’m copying a large file to the folder, I can receive multiple FILE_ACTION_MODIFIED messages, it seems each time windows writ
This is a solution of a very hacky nature, but in a very hairy situation you can run a polling loop to check the size (or modified date) of the file. If it doesn't change for a while, you can somewhat safely assume that the file is finished copying.
EDIT: This is not the optimal solution in the average case, but consider that in the OP's case better solutions are ruled out by the problem constraints. Think about this before you think of downvoting.
Windows provides an API to monitor directory content update. You can use the Created event to detect new file, but be aware that this event firing does not necessarily means that the file is released yet.
native C++ specs and code example :
http://msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx
.net :
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
When you poll for the size of the file, don't use _stat/_stat64
. Instead, open the file each time you need and call _filelengthi64
to get the size of the file. The file size that is returned by _stat64
is not updated in real-time by the Windows operating system. Also by being able to open the file, you are testing to see that any long copy operations have been completed.