我正在嘗試編寫將用於將更新應用於應用程序的程序。由於應用程序的性質,某些文件將被鎖定(主要由IIS),並且不能使用File.Copy(target)
覆蓋。當手動執行任務時,我們的支持團隊通常會使用Windows資源管理器複製文件,從而解鎖文件以允許他們複製新文件。使用Move覆蓋已鎖定的文件然後複製
爲什麼在使用Windows資源管理器執行此操作時會發生這種情況,以及它爲何如此失敗當在代碼中完成它?
通過我使用的代碼大致如下:
File.Move(target, tempPath)
File.Copy(source, target)
隨着打開和鎖定了一個文件,你再嘗試覆蓋一個單元測試:
var source = "c:\\source.txt";
var target = "c:\\target.txt";
var temp = "c:\\temp\\fake-target.txt";
using (var lockedFile = System.IO.File.OpenWrite(target)) {
File.Move(target, temp)
File.Copy(source, target)
}
任何建議將是大。感謝您的幫助。
究竟是什麼與Windows資源管理器一起工作並不十分清楚。顯然,資源管理器只是另一個應用程序,它確實給你「抱歉!」如果您嘗試移動/刪除鎖定文件就像其他任何錯誤。 – Jon 2011-03-31 22:01:05
其實它完全有效。如果您嘗試刪除文件,它將失敗,但如果您嘗試移動或重命名文件,它將會成功。文件重命名後,您可以將新文件複製到之前鎖定的文件的位置。這可能是應用程序鎖定文件不是專門鎖定文件,而是阻止複製操作。 – smaclell 2011-03-31 22:09:56
@smaclell:爲什麼你不試圖像單元測試那樣鎖定一個文件,直到按下一個鍵並查看Explorer如何處理它? – Jon 2011-03-31 22:11:55