以下代码抛出此异常:
“该进程无法访问文件'\filename',因为它正在被另一个进程使用。”
很公平,但是关闭阅读器和/或 mmf 以便删除文件的正确方法是什么?我认为 MemoryMappedFile 会有一个 close() 方法或类似的方法,但事实并非如此。
任何帮助将不胜感激。谢谢。
mmf = MemoryMappedFile.CreateFromFile(filename,
System.IO.FileMode.OpenOrCreate,
"myMap" + fileNo.ToString(),
fileSize);
reader = mmf.CreateViewAccessor(0, accessorSize);
<do stuff>
File.Delete(filename);
EDITS:
看来只有在析构函数中我才遇到这个问题。当在其他地方调用 dispose() 时,它工作正常,但是当我执行以下操作时,它会抛出异常。 Reader和mmf显然是该类的成员。输入构造函数后,文件访问是否会发生隐含的情况?
~Class()
{
try
{
if (File.Exists(filename))
{
reader.Dispose();
mmf.Dispose();
File.Delete(filename);
}
}
catch (Exception e)
{
}
}
您应该利用using
如果可能的话构造:
using (var mmf = MemoryMappedFile.CreateFromFile(filename,
System.IO.FileMode.OpenOrCreate,
"myMap" + fileNo.ToString(), fileSize))
{
using (reader = mmf.CreateViewAccessor(0, accessorSize))
{
... <do stuff> ...
}
}
File.Delete(filename);
否则请致电Dispose()
on the reader
and mmf
然而对象using
将确保在抛出异常的情况下将其清理干净<do stuff>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)