以下代码抛出此异常:
“进程无法访问文件'\ 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);
编辑:
看起来我只是在析构函数中遇到了这个问题。当在其他地方调用dispose()时它工作正常,但是当我执行以下操作时它会抛出异常。 Reader和mmf显然是班上的成员。输入构造函数后,文件访问是否隐式发生了什么?
~Class()
{
try
{
if (File.Exists(filename))
{
reader.Dispose();
mmf.Dispose();
File.Delete(filename);
}
}
catch (Exception e)
{
}
}
答案 0 :(得分:4)
如果可能,您应该使用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()
和reader
对象上调用mmf
,但using
将确保在<do stuff>
中抛出异常时将其清除}。
答案 1 :(得分:3)
在删除文件之前,您必须处理映射:
reader.Dispose();
mmf.Dispose();
File.Delete(filename);