使用File.Move命令时遇到了一个奇怪的问题。程序实际上移动并重命名文件,但然后抛出一个异常,找不到源文件; - 因为文件被移动了所期望的内容。
如果我抓住了Exception,程序运行正常,但我想知道为什么我会遇到这些异常。
我的代码:
foreach (string str in CPM.prot.FKFinishedBad)
{
try
{
string dir = System.Configuration.ConfigurationSettings.AppSettings["ResultDir"] + "\\" + DateTime.Now.ToString("yyyy_MM_dd") + "_Bearbeitete Protokolle";
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
File.Move(System.Configuration.ConfigurationSettings.AppSettings["ResultDir"] + "\\" + str + "_" + CPM.LastJob + ".txt", dir + "\\" + "\\" + str + "_" + CPM.LastJob + "_Nachproduziert" + ".txt");
}
catch (Exception e)
{
}
}
答案 0 :(得分:2)
确保CPM.prot.FKFinishedBad中的每个项目都是唯一的 - 这可能是造成这种现象的原因。
另外,我建议重构代码:目录行不需要重复,应该在循环之外。
请学习使用String.Format和Path.Combine。
答案 1 :(得分:1)
尝试暂停线程半秒(或更短):
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
//suspend thread for 0.5 sec
}
这可能与您创建目录并立即移动文件有关。所以暂停一个线程让“呼吸”到系统。
答案 2 :(得分:1)
您确定所有文件都存在吗? 可能会发生其中一个缺失(这解释了异常),而其他正确处理。你也可以在使用File.Exists移动之前检查它们。
另外,使用空的catch块时要小心,在调试时会引起很多麻烦。
答案 3 :(得分:0)
我刚刚遇到这个问题,我花了一段时间才意识到有一个FileInfo.MoveTo
命令似乎做了同样的事情。
然而,它不会引发异常,并且有效。
如果有两种方法可以完成一件事,而且只有一种方法有效,那就有点狡猾了。