gpt4 book ai didi

c# - 无法删除 MemoryMappedFile 的文件

转载 作者:太空狗 更新时间:2023-10-29 23:02:42 30 4
gpt4 key购买 nike

下面的代码抛出这个异常:

“该进程无法访问文件 '\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)
{
}
}

最佳答案

您应该使用 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> 中抛出异常.

关于c# - 无法删除 MemoryMappedFile 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6481378/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com