Overwriting an Open File in Windows
In what situat开发者_如何转开发ions does Windows allow you to overwrite an open file? Is that ever allowed? This includes renaming a different file to the same name as an open file.
If you look at the documentation for CreateFile()
, there is this dwShareMode
parameter. This can determine what another process can do with that file while it's open.
Specifying FILE_SHARE_READ
lets another process open the file for reading. There's FILE_SHARE_WRITE
, which means that another process can write to it. There's also FILE_SHARE_DELETE
, which allows delete and (IIRC) also rename.
If someone opened the file without FILE_SHARE_WRITE
and you open the file for write access, you'll get ERROR_SHARING_VIOLATION
. Otherwise you should be able to write to it.
Unfortunately if one process comes along and doesn't set sharing flags to allow something you need, you're pretty much out of luck. Although you might be able to use MoveFileEx()
with the option MOVEFILE_DELAY_UNTIL_REBOOT
. But I'm not sure if that works; I don't know much about that call except that it exists. :-)
精彩评论