另一个进程使用的文件[重复]

Posted

技术标签:

【中文标题】另一个进程使用的文件[重复]【英文标题】:File used by another process [duplicate] 【发布时间】:2010-10-12 04:21:44 【问题描述】:

很多时候我们在尝试在 Windows 平台上写入文件时遇到错误,

“该进程无法访问文件‘XXX’,因为它正被另一个进程使用。”

在写入文件之前如何检查 C#,它没有被另一个进程使用?

【问题讨论】:

【参考方案1】:

你不能,基本上 - 你必须尝试打开文件进行写入,如果你得到一个异常你不能写入它:(

即使您可以先进行单独检查,在您开始编写之前,结果也会过时 - 您稍后仍可能会遇到异常。

如果框架提供TryOpen 方法就好了,诚然...

【讨论】:

+1 我在每晚的批次中使用它,它有效,不优雅,但有效。【参考方案2】:

这里唯一的选择是捕获生成的异常并适当地处理它。有关完整讨论,请参阅另外两个 SO 主题:

How to check for file lock? Detecting whether a file is locked by another process (or indeed the same process)

【讨论】:

【参考方案3】:

在您的代码上使用文件后,您必须close您的文件:

FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read); //file is opened
//you use the file here 
file.Close(); //then you must to close the file

【讨论】:

解决了我的问题。忘记关了。放在using(...)... 的标题上,一切顺利【参考方案4】:

您只需尝试使用您想要的共享访问权限打开,并处理引发的错误。

注意:有时文件无法打开只是因为您指定的文件共享权限与某人已经打开文件的文件共享权限冲突。

Please see my answer here for more information.

【讨论】:

【参考方案5】:

尝试将 open 命令放在 try-catch 语句中。如果文件正在被使用,将抛出 IOException。

【讨论】:

【参考方案6】:

如果可以重命名,请尝试重命名文件,然后确认没有其他进程正在访问该文件。最后确保你在同一个文件夹中重命名了同一个文件。

【讨论】:

以上是关于另一个进程使用的文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Linux中另一个进程的重复文件描述符(没有sendmsg)

检测文件是不是被另一个进程(或实际上是同一个进程)锁定[重复]

如何从另一个进程捕获退出代码[重复]

每次另一个另一个进程更新文件时如何从文件中读取

批处理文件或Powershell杀死进程[重复]

我可以在属性文件中引用另一个属性吗(使用 $property)[重复]