我有这个功能:
private static bool copyFile(string file)
{
string contents;
try
{
contents = File.ReadAllText(file);
File.WriteAllText(_destFile , contents);
return true;
}
catch (IOException ex)
{
MessageBox.Show(ex.ToString());
return false;
}
}
相当简单,首先通过阅读原文然后写入目标文件夹来复制文件。这是第一次工作,但第二次我调用此函数时,contents = File.ReadAllText(file);
发生异常,它被另一个进程使用。
在此消息框之后,我单击确定并查看我的目标文件夹,文件被复制(内容与原始文件相同)。我确定该文件被复制,因为当我更改原始文件的内容时它与复制的文件相同,即使发生了IOException。
即使发生IOException并且copyFile函数返回true,也会运行File.WriteAllText(_destFile , contents);
行。 怎么可能?
我的程序运行正常没有错。我只是好奇为什么它忽略了异常并继续进行。
答案 0 :(得分:2)
您看到此行为的一个可能原因是您多次执行该副本。其中一个肯定是失败的。根据您发布的代码,它无法产生该异常,仍然可以正常编写文件。
异常谈论的另一个过程很可能就是你自己的应用程序。
尝试在方法的开头放置一个断点,看看它是否真的只在你预期的时候触发。还要在return true;
上设置断点,看看它是否有时会成功。
答案 1 :(得分:2)
您的代码看起来不错(虽然您可能不知道内置的File.Copy方法。我怀疑该文件被Internet Explorer或您的防病毒软件(或类似的东西)锁定,特别是当您在Temporary Internet Files文件夹中创建文件时。这是一个特殊的Windows文件夹,您不应该在其中创建自己的文件。
您可以使用Process Explorer找出锁定文件的进程 - Ctrl + F,然后输入文件名。