使用Windows API,是有可能重命名一個文件,該文件在另一個進程中打開,而不FILE_SHARE_DELETE
權限?重命名另一個進程中打開文件而不FILE_SHARE_DELETE
我認爲它的基礎上CreateFile
docs是不可能的說:
注意:刪除訪問同時允許刪除和重命名操作。
與該一致的是,通過在最終用戶命令提示定期rename
重命名,我經常遇到The process cannot access the file because it is being used by another process.
;在通過最終用戶GUI進行重命名並通過python的os.rename
發生類似的錯誤。
然而,this高度upvoted答案似乎狀態正好相反:如果任何其他進程已經打開,而不刪除共享文件
刪除會失敗,重命名從來都不是一個問題。
而且它不只是一個小點;整個答案取決於這一陳述:它只解決了OP問題,如果重命名不會在刪除時失敗。
我錯過了什麼?
注:如果它的事項,我指到Windows 10,使用C++ API(我假設是嚴格比C#API更強大)。
編輯:移動代碼片段到new question。
但是爲什麼具有3個參數的'File.Replace'成功,即使目標文件正在使用?如果將目標名稱重命名爲備份名稱會延遲到重新啓動,那麼將源名稱重命名爲目標將會失敗,不是嗎? – max
'File.Replace'是一個不同的操作。它映射到['ReplaceFile'](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365512(v = vs.85).aspx)。請參閱http://stackoverflow.com/questions/32860388/replacefile-alternative-when-application-keeps-file-locked爲什麼當另一個應用程序打開'lpReplacedFileName'時可以成功。 –
哇我的問題的整個答案是嵌入[刪除答案](http://stackoverflow.com/a/32862684/336527)一個非常不同的問題......所以IIUC'ReplaceFile'只是改變文件元數據( =目錄項)不受權限保護。非常整潔,我很驚訝這不是一個衆所周知的事情,因爲它是在Windows上實現原子文件寫入的唯一方法。也許你可以將這些信息添加到你的答案中(假設它是正確的)? – max