亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Windows上可以重命名(覆蓋)原子文件嗎?

在Windows上可以重命名(覆蓋)原子文件嗎?

守著一只汪 2019-10-29 11:21:27
在POSIX系統上,rename(2)提供了原子重命名操作,包括覆蓋目標文件(如果存在)以及是否允許權限。有沒有辦法在Windows上獲得相同的語義?我知道Vista和Server 2008上的MoveFileTransacted(),但是我需要它來支持Win2k及更高版本。這里的關鍵詞是原子的 ……解決方案一定不能以使操作處于不一致狀態的任何方式失敗。我見過很多人說這在win32上是不可能的,但是我問你,真的嗎?如果可能,請提供可靠的引用。
查看完整描述

3 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

Win32不保證原子文件元數據操作。我會提供引用,但沒有引用-沒有書面或書面保證的事實就足夠了。

您將必須編寫自己的例程來支持此操作。不幸的是,但是您不能指望win32提供這種級別的服務-根本不是為它設計的。


查看完整回答
反對 回復 2019-10-29
?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

在Windows Vista和Windows Server 2008中,已添加了原子移動功能-MoveFileTransacted()


不幸的是,這對于舊版本的Windows沒有幫助。


查看完整回答
反對 回復 2019-10-29
?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

在Windows上,您仍然可以進行rename()調用,盡管我想如果不知道您使用的文件系統就無法做出您想要的保證-例如,如果您使用的是FAT,則無法保證。


但是,可以使用MoveFileEx并使用MOVEFILE_REPLACE_EXISTING和MOVEFILE_WRITE_THROUGH選項。后者在MSDN中具有以下描述:


設置此值可確保在函數返回之前將作為復制和刪除操作執行的移動刷新到磁盤。刷新發生在復制操作結束時。


我知道這不一定與重命名操作相同,但是我認為這可能是您獲得的最佳保證-如果這樣做是為了移動文件,則應該進行更簡單的重命名。


查看完整回答
反對 回復 2019-10-29
  • 3 回答
  • 0 關注
  • 884 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號