读取、写入、附加、删除内存映射文件
本文关键字:映射 文件 内存 附加 写入 读取 删除 | 更新日期: 2023-09-27 18:26:19
在我的windows应用程序中,我想使用内存映射文件。网络上有各种各样的文章/博客,它们有足够的信息来创建内存映射文件。我正在创建2个内存映射文件,现在我想对这些文件做一些操作,比如读取其内容,向其中添加一些内容,从中删除一些内容。网上可能有更多关于这些的信息,但不幸的是,我找不到任何信息。下面是我用来编写内存映射文件的函数。
// Stores the path to the selected folder in the memory mapped file
public void CreateMMFFile(string folderName, MemoryMappedFile mmf, string fileName)
{
// Lock
bool mutexCreated;
Mutex mutex = new Mutex(true, fileName, out mutexCreated);
try
{
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
using (StreamWriter writer = new StreamWriter(stream, System.Text.Encoding.Unicode))
{
try
{
string[] files = System.IO.Directory.GetFiles(folderName, "*.*", System.IO.SearchOption.AllDirectories);
foreach (string str in files)
{
writer.WriteLine(str);
}
}
catch (Exception ex)
{
Debug.WriteLine("Unable to write string. " + ex);
}
finally
{
mutex.ReleaseMutex();
}
}
}
}
catch (Exception ex)
{
Debug.WriteLine("Unable to monitor memory file. " + ex);
}
}
如果有人能帮助我,我将不胜感激。
我认为您要查找的类是MemoryMappedViewAccessor
。它提供了读取和写入内存映射文件的方法。删除只不过是一系列精心编排的写入操作。
它可以使用CreateViewAccessor
方法从MemoryMappedFile
类创建。
在这段代码中,我做了一些与您想要实现的类似的事情。我每秒都会写信给MMF,你可以让其他进程从该文件中读取内容:
var data = new SharedData
{
Id = 1,
Value = 0
};
var mutex = new Mutex(false, "MmfMutex");
using (var mmf = MemoryMappedFile.CreateOrOpen("MyMMF", Marshal.SizeOf(data)))
{
using (var accessor = mmf.CreateViewAccessor())
{
while (true)
{
mutex.WaitOne();
accessor.Write(0, ref data);
mutex.ReleaseMutex();
Console.WriteLine($"Updated Value to: {data.Value}");
data.Value++;
Thread.Sleep(1000);
}
}
}
看看这篇文章,了解如何使用MMF在进程之间共享数据。