我在 Page_Load 调用的函数中有以下代码。启动 Visual Studio 后首次加载页面时,一切正常。
但此后对文件的任何其他打开调用都会返回IOException: "File is in use by another process"
,即使直接在 VisualStudio 解决方案中打开文件也会返回此错误(当然不是异常)
FileStream mailinglist_FileStream = new FileStream(@"\foobarFile.txt", FileMode.Open);
PeekingStreamReader mailinglist_Reader = new PeekingStreamReader(mailinglist_FileStream);
//Do some stuff with the file
mailinglist_FileStream.Close();
mailinglist_Reader.Close();
mailinglist_Reader.Dispose();
mailinglist_FileStream.Dispose();
为什么文件仍然被锁定?为什么完全重新启动 Visual Studio 会重置文件?
检查文件属性时它说:
构建操作:内容
复制到输出目录:不复制
我只阅读这个文件。我可以做类似的事情吗adLockOptimistic
,以便多个进程可以访问该文件?
为什么文件仍然被锁定?以及为什么完全重新启动 Visual
Studio 重置文件?检查文件属性时,它显示[...]
我不知道为什么文件仍然被锁定:可能是因为您的代码在流关闭/处置之前失败。
About “为什么要完全重新启动 Visual Studio [...]”:因为您可能使用 IIS Express 或 ASP.NET Dev Server,它们在您关闭 IDE 时也会关闭,因此文件上的锁会被释放,因为持有锁的进程不再运行。
还有关于“为什么文件仍然被锁定?[...]“这可能是因为文件流未关闭,因为有时线程可能无法成功结束并且锁未释放。
正如其他答案所说,检查如何using
块可以避免这种情况IDisposable
对象不会被处置:
// FileShare.ReadWrite will allow other processes
// to read and write the target file even if other processes
// are working with the same file
using var mailinglist_FileStream = new FileStream(@"\foobarFile.txt", FileMode.Open, FileShare.ReadWrite);
using var mailinglist_Reader = new PeekingStreamReader(mailinglist_FileStream);
// Do your stuff. Using blocks will call Dispose() for
// you even if something goes wrong, as it's equal to a try/finally!
我只阅读这个文件。我可以做类似的事情吗
adLockOptimistic,让多个进程可以访问该File?
是的,看看File.Open
方法和FileShare
枚举:
-
File.Open
: http://msdn.microsoft.com/en-us/library/y973b725.aspx http://msdn.microsoft.com/en-us/library/y973b725.aspx
-
FileShare
enum: http://msdn.microsoft.com/en-us/library/system.io.fileshare.aspx http://msdn.microsoft.com/en-us/library/system.io.fileshare.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)