How to know a file is finished copying

前端 未结 3 618
小鲜肉
小鲜肉 2021-01-22 07:28

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

相关标签:
3条回答
  • 2021-01-22 07:43

    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.

    0 讨论(0)
  • 2021-01-22 07:54

    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

    0 讨论(0)
  • 2021-01-22 08:06

    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.

    0 讨论(0)
提交回复
热议问题