這個問題有可能做的事實,你使用兩種不同的方法.Substring
:String#Substring(int)
和String#Substring(int,int)
。確實:
File.Delete(filePath.Substring(filePath.Length - 4) + ".bak");
// ^with one int
File.Move(filePath, filePath.Substring(0, filePath.Length - 4) + ".bak");
// ^with two ints
不幸的是,這兩者在語義上並不相同。 one with one int是開始索引。因此,鑑於filePath
等於test.txt
,您要刪除的文件是.txt.bak
,接下來您的目標是將文件移動到test.bak
。或與Mono的C#模擬器運行以下命令:
csharp> String filePath = "test.txt";
csharp> filePath.Substring(filePath.Length - 4) + ".bak"
".txt.bak"
csharp> filePath.Substring(0, filePath.Length - 4) + ".bak"
"test.bak"
請更新:
File.Delete(filePath.Substring(0,filePath.Length - 4) + ".bak");
// ^added zero
File.Move(filePath, filePath.Substring(0, filePath.Length - 4) + ".bak");
另一種更優雅且不易出錯的方式顯然是使用一個變量之間,使得你確定,你在談論同一個文件:
String backupfile = filePath.Substring(0, filePath.Length - 4) + ".bak";
File.Delete(backupfile);
File.Move(filePath,backupfile);
最後,不建議做通路處理自己:使用專用的方法來連結和操作文件路徑。
我覺得FilePath在File.Delete方法中是不正確的。你能檢查路徑是否正確? – Baskar
嘗試先移動文件,然後從原始位置刪除最新的文件http://stackoverflow.com/questions/5704982/file-move-fails-when-preceded-by-a-file-delete – keyboardP