2011-07-08 35 views
12

之間是什麼差異/刪除和移動

  1. 將文件複製並使用File.Copy()File.Delete()
  2. 移動文件刪除它使用File.Move()

來講差異執行這些操作所需的許可是否有區別?任何幫助非常感謝。

回答

8

File.Move方法可用於將文件從一個路徑移動到另一個路徑。此方法適用於磁盤卷,如果源和目標相同,則不會引發異常。

您不能使用Move方法覆蓋現有文件。如果您嘗試通過將相同名稱的文件移動到該目錄來替換文件,則會出現IOException。 爲了克服這個問題,你可以使用複製和刪除方法的組合

+0

好的,謝謝。好點。但我想知道進行這些操作所需的許可。 說複製我需要'讀'權限和刪除我需要'修改'文件權限..等等?移動??? – Lamps

+0

移動是複製和刪除的組合,所以如果你有這個操作的權限,那麼不需要額外的移動許可 –

+0

好的,謝謝。我知道了。 我認爲對於刪除和移動操作,我們需要修改文件的權限。 – Lamps

0

我不認爲有任何區別權限明智,但我個人更喜歡使用File.Move(),因爲那樣你有兩個動作發生在同一個「交易」中。換句話說,如果移動中的某些內容失敗,則整個操作失敗。但是,如果您分兩步分解(複製+刪除),如果複製工作並刪除失敗,則必須手動反轉「交易」(刪除副本)。

0

權限文件傳輸在兩點檢查:源和目標。因此,如果您沒有讀取源文件夾中的權限,或者您沒有寫入目標中的權限,則這些方法都會拋出AccessDeniedException異常。換句話說,權限檢查對於正在使用的方法是不可知的。

3

明智的性能,如果在一個和相同的文件系統,移動文件是(以簡化術語)只是調整文件系統本身(可能調節在red/black-tree一些節點)的一些內部寄存器,而無需實際移動一些東西。

想象一下,你有180MiB移動,你可以以大約30MiB/s的速度寫入磁盤。然後複製/刪除,完成大約需要6秒。通過一個簡單的移動[相同的文件系統],它變得如此之快,你甚至可能沒有意識到它。我曾經寫過一些事務性的文件系統助手,它們會移動或複製多個文件,全部或沒有;爲了儘可能快地完成提交,我首先將所有東西移動/複製到一個臨時的子文件夾中,然後最終提交會將現有數據移動到另一個文件夾(以啓用回滾),並將新數據移動到目標)。