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());
}
我在代码中做一个简单的测试,如下:
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());
}