File.Open 抛出 IOException,但文件永远不会 open/shown

File.Open throws IOException, but file is never open/shown

我在代码中做一个简单的测试,如下:

try
{
    File.Open(path);
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

path 是上面声明的字符串。当按下按钮时调用此例程,第一次调用时,它“正常工作”(引用,因为虽然它没有抛出异常,但文件永远不会 open/shown)。第二次按下,抛出如下异常:

System.IO.IOException: The process cannot access the file because it is being used by another process.

但是,该文件实际上从未打开过。我使用任务管理器对其进行监控,但从未显示过该文件的任何实例。

我尝试使用 using (File.Open(path)) {},但没有成功。

有人可以帮助我吗?这似乎是我犯的一个基本错误,但我找不到它。

更新

Lasse Vågsæther Karlsen 提供了正确的答案,指出我的错误实际上是关于概念,而不是代码。谢谢!

我认为你误解了 File.Open 的作用。

此方法将打开文件供您的程序读取。换句话说,该方法将 return 一个 Stream 对象,您可以使用该对象读取和写入该文件。

在该操作结束时,您必须关闭它,这就是 using 会为您做的。

不过,我猜这不是你想要做的。您一直提到文件打不开,您正在使用任务管理器查找文件,但没有看到它。

您需要 Process.Start。您正在尝试打开另一个可执行文件,例如 notepad.exe,或者您正在尝试打开一个文档,例如 readme.txt,这就是您不使用调用该方法的结果的原因,并且为什么您使用任务管理器来查找它。

因此,假设您仍想捕获异常,那么您应该这样做:

try
{
    Process.Start(path);
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}