【发布时间】:2019-08-27 07:53:23
【问题描述】:
我在代码中做一个简单的测试,如下:
try
{
File.Open(path);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
path 是上面声明的字符串。当按下按钮时调用此例程,并且第一次调用它时,它“正常工作”(引用,因为虽然它没有抛出异常,但文件永远不会打开/显示)。第二次按下,抛出如下异常:
System.IO.IOException:该进程无法访问该文件,因为它正被另一个进程使用。
但是,该文件实际上从未打开过。我使用任务管理器对其进行监控,但从未展示过该文件的任何实例。
我尝试使用using (File.Open(path)) {},但没有成功。
有人可以帮我吗?这似乎是我正在做的一个基本错误,但我找不到它。
更新
Lasse Vågsæther Karlsen 提供了正确答案,指出我的错误实际上是关于概念,而不是代码。谢谢!
【问题讨论】:
-
File.Open将返回一个流,使文件保持打开状态。如果您使用用于查找保持文件打开的进程的任何工具都无法看到这一点,则说明您使用了错误的工具或错误地使用了该工具。 -
现在,至于如何修复它,我们不知道,因为您还没有告诉我们您想要完成什么。由于您实际上并没有将此流用于任何事情,因此我的建议是简单地删除代码,那么您也不会例外。如果这不是一个可行的解决方案,请退后一步,告诉我们最初的问题是什么导致您对这棵树吠叫。
-
打开文件并处理它的正确方法是 using 语句,但您可能需要将其引用存储到变量中。由于您也没有这样做根本不清楚您为什么要打开文件。
-
在这里重新阅读您的问题,我有一个问题要问您。您是否尝试启动另一个程序?
path这里是指另一个可执行文件吗?因为如果您尝试这样做,File.Open是错误的方法,这将打开文件以供您的进程读取。如果你想打开另一个程序,比如记事本,你应该改用Process.Start。如果路径指向已注册程序的文档文件,这也将起作用,例如打开 .doc 文件会启动 Word。
标签: c# file-io ioexception