2012-04-12 48 views
1

我試圖移動(File.Move)鎖定.dll文件來執行應用程序更新。 File.Move方法執行無例外。但文件沒有移動。我的意思是在執行File.Move方法後,我有兩個相同文件的副本:在目標文件夾和源文件夾中。這裏是代碼:)移動鎖定的文件

File.Move(fileName, newFileName); 

有人可以解釋這個原因嗎?

+1

你的問題是什麼? – Nick 2012-04-12 09:09:02

+0

如果文件正在使用中,您不能刪除它(操作系統可以防止這種情況)......您是否期​​望有不同的行爲? – Marco 2012-04-12 09:10:25

+0

已編輯。操作系統可以移動鎖定的文件 – 2012-04-12 09:11:21

回答

7

跨卷File.Move按順序執行兩個操作:

  1. 文件複製
  2. 文件刪除

它好像第一個成功和第二默默地失敗。結果如預期。從這裏

注:http://msdn.microsoft.com/en-us/library/system.io.file.move.aspx

如果您嘗試移動跨磁盤卷文件和文件正在使用中,將文件複製到目標,但沒有從源中刪除。

+0

一些要回答的註釋:只有當我們嘗試跨卷移動文件時,File.Move纔會執行「複製」和「刪除」。否則File.Move只會更新文件元數據(因爲可以移動鎖定的文件)。 – 2012-04-12 09:23:22

+0

那麼這是跨越卷?會解釋一切。 – yamen 2012-04-12 09:41:05

0

通常在這種情況下,你要麼有,這並不需要任何的應用程序的DLL,所以你釀出更新,它可以移動它喜歡的一切,做了更新,並重新啓動應用程序獨立的更新過程。

或者像安裝程序一樣,在下次重新啓動時將文件更改提交給發生器。

0

File.Move方法將首先將文件fileName複製到文件'newFileName'。一旦第一步成功,它將刪除文件'fileName'。

現在如果文件'fileName'已經打開/鎖定,它將無法刪除文件。