问题可能与您使用两种不同的.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
不幸的是,两者在语义上并不等价。带一个 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);
最后不建议自己做路径处理:使用专用方法加入和操作文件路径。