读取文件时出现神秘的IOException

时间:2013-12-27 09:54:20

标签: c# copy ioexception

我有这个功能:

    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。

即使发生IOException并且copyFile函数返回true,也会运行File.WriteAllText(_destFile , contents);行。 怎么可能?

我的程序运行正常没有错。我只是好奇为什么它忽略了异常并继续进行。

2 个答案:

答案 0 :(得分:2)

您看到此行为的一个可能原因是您多次执行该副本。其中一个肯定是失败的。根据您发布的代码,它无法产生该异常,仍然可以正常编写文件。

异常谈论的另一个过程很可能就是你自己的应用程序。

尝试在方法的开头放置一个断点,看看它是否真的只在你预期的时候触发。还要在return true;上设置断点,看看它是否有时会成功。

答案 1 :(得分:2)

您的代码看起来不错(虽然您可能不知道内置的File.Copy方法。我怀疑该文件被Internet Explorer或您的防病毒软件(或类似的东西)锁定,特别是当您在Temporary Internet Files文件夹中创建文件时。这是一个特殊的Windows文件夹,您不应该在其中创建自己的文件。

您可以使用Process Explorer找出锁定文件的进程 - Ctrl + F,然后输入文件名。