- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
下面的代码抛出这个异常:
“该进程无法访问文件 '\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/
在我的 WCF 服务中,我需要提供支持 Range 的文件下载功能用于分 block 下载的 HTTP header 。第一次调用GetFile服务方法创建新的MemoryMappedFile来自磁盘
在 Windows 下,当容量参数(最后一个参数)设置为比基础文件更大的大小时,此 F# 代码会将文件从 12 字节扩展到 655346 字节。这似乎是扩展内存映射文件的最干净的方法。在 mono/l
我有一些方法可以使用 MemoryMappedFiles 来写入/读取数据。如果我使用简单的字符串作为文件名,它们就可以正常工作,例如“file.mmf”。但是,如果我使用完整目录路径,则会抛出上述异
我在执行 MemoryMappedFile 流式传输时遇到了一个小问题。我有 2 个项目,一个用于发送字节,另一个用于读取字节。在这两个进程之间应该有一个 2 秒的 sleep 定时器。 我已经实现了
我在使用 C# 中的 MemoryMappedFiles 时遇到了一些问题。当我只使用 1 个进程时,它们工作得很好,但是当我尝试从不同的进程访问 mmf 文件时,我得到允许这样做的错误。 我有一个数
我正在学习本教程 here 我很难弄清楚如何将字符串“THIS IS A TEST MESSAGE”存储在内存映射文件中,然后将其从另一端拉出。本教程说使用字节数组。请原谅我,我是新手,先自己尝试。
我正在使用 MemoryMappedFile 在两个进程之间交换数据。所以我在两个过程中都创建/打开了这样的文件: MemoryMappedFile m_MemoryMappedFile = Memo
我有两个 .NET 4.0 WinForms 应用程序(主要)从共享的 MemoryMappedFiles 读取地理数据。最终用户可以自由启动其中一个应用程序或另一个应用程序,或同时运行这两个应用程序
如果我在同一个 MemoryMappedFile 中并行读写会发生什么?我是否有必要在阅读之前通过 Mutext 锁定它们,如 MSDN 上的示例所示? Memory-Mapped Files 最佳答
我有一个处理Excel文件(之前上传到服务器)的网络服务,涉及到很多数据库更新,需要相当长的时间。我想提供另一个 web 服务,可以调用它来检查这个过程的进度。它将进程的 ID(可能是 GUID)作为
我需要将应用程序“A”中的变量值共享给同一系统上的不同应用程序。我只需要根据要求使用 MemoryMappedFiles。我创建了另一个简单的应用程序“B”,它从应用程序 A 中读取共享变量的值。但是
我有创建内存映射文件的代码,如下所示: using (Mutex mutex = new Mutex(false, CoordinatorMutexName)) { mutex.WaitOne
我有一组大型对象(超过 20GB),我需要从应用程序快速访问它们。 到目前为止,我已经在应用程序启动时从磁盘读取这些文件到 RAM。这是一项昂贵的任务,因为文件被反序列化为内存中的对象。但是,在加载这
如何使用 MemoryMappedFile 读取文件字节并将其放入 byte[] 数组? 最佳答案 假设您只想读取文件的一部分,这样的事情应该可行: long offset = 0x10000000;
是否可以结合使用 MemoryMappedFile 和 FileSystemWatcher?换句话说,如何为 FileSystemWatcher 的构造函数获取内存映射文件的路径: new FileS
我的任务是实现一个搜索功能,该功能将搜索几个大型(几 MB)日志文件并返回包含关键字的行。日志文件不断被添加到池中,因此每次搜索都必须是动态的。 创建 MemoryMappedFile 是否有意义?对
在 C# 4.0 中,MemoryMappedFile 有几个工厂方法:CreateFromFile、CreateNew、CreateOrOpen 或 打开现有。如果 MemoryMappedFile
正如标题所说;我可以依赖 MemoryMappedFile 来创建一个全为零的文件吗?我已经通过读取一些新创建的文件进行了测试,但这种“测试”似乎是徒劳的,尽管我还没有看到非零字节。 是否有任何我遗漏
下面的代码抛出这个异常: “该进程无法访问文件 '\filename',因为它正被另一个进程使用。” 很公平,但是关闭阅读器和/或 mmf 以便删除文件的正确方法是什么?我认为 MemoryMappe
我用 MemoryMappedFile 做了一个简单的测试 msdn说: 2 个进程,1 个内存映射文件: 第一个进程添加字符串“1” 第一个进程等待 第二个进程添加字符串“2”并终止 第一个进程现在
我是一名优秀的程序员,十分优秀!