【问题标题】:Can we merge two memory mapped files?我们可以合并两个内存映射文件吗?
【发布时间】:2012-03-09 20:29:16
【问题描述】:

我们可以合并两个内存映射文件吗?如果是这样怎么办?如果没有,那为什么不呢?

【问题讨论】:

  • 你能用几句话描述一下,最好用示例代码来描述你想要实现的目标。
  • “合并”是什么意思?内存映射文件只是查看文件中数据的另一种方式。你能在不使用内存映射的情况下描述你想要的结果吗?
  • 你不能merge两个mmap'ed区域,但是你可以copy数据从一个到另一个或者创建一个统一的view .
  • 我只想将一个内存映射文件数据写入另一个内存映射文件。例如,我有一个 MMF,其中写入了“Hello”,并有另一个文件写入了“World”。现在我想将第二个 MMF 文件数据写入第一个 MMF 文件以使其成为“Hello World”。

标签: c# memory-mapped-files


【解决方案1】:

所以这是我对MemoryMappedFiles 的第一次体验,试一试:

String f1Path = @"C:\Temp\Test1.txt";
String f2Path = @"C:\Temp\Test2.txt";
byte[] buffer;
int offset;
int length;

using (FileStream f1ReadStream = new FileStream(f1Path, FileMode.Open, FileAccess.Read))
{
    offset = (int)f1ReadStream.Length;
}
using (FileStream f2ReadStream = new FileStream(f2Path, FileMode.Open, FileAccess.Read))
{
    length = (int)f2ReadStream.Length;
}
// read file2 and append all to file1
using (var mappedFile2 = MemoryMappedFile.CreateFromFile(f2Path, FileMode.Open, null,  length))
{
    using (var reader = mappedFile2.CreateViewStream(0, length, MemoryMappedFileAccess.Read))
    {
        // Read from MMF
        buffer = new byte[length];
        reader.Read(buffer, 0, length);
    }
}

using (var mappedFile1 = MemoryMappedFile.CreateFromFile(f1Path,FileMode.Open, null, offset + length))
{
    // Create writer to MMF
    using (var writer = mappedFile1.CreateViewAccessor(offset, length, MemoryMappedFileAccess.Write))
    {
        // Write to MMF
        writer.WriteArray<byte>(0, buffer, 0, length);
    }
}

【讨论】:

  • 太棒了!!..似乎正在工作。需要检查它是否适合我的场景。感谢您投入时间。
  • 你能回答我的问题吗?stackoverflow.com/questions/9760073/…
  • 它在我的项目中不起作用。我不知道为什么。 Test1.txt 没有改变。
猜你喜欢
  • 1970-01-01
  • 2013-04-13
  • 2019-11-21
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多