如何使用内存映射文件C#读写文件?

我在D Drive中有一个像“D:\ Image \ 1.tiff”的图像。 我想读取此文件并将其写入另一个位置,例如在路径“D:\ Project \”中。 如何使用内存映射文件执行此操作?

CreateFromFile方法从磁盘上的现有文件创建内存映射文件。 以下示例创建一个极大文件的一部分的内存映射视图,并操作其中的一部分。

using System; using System.IO; using System.IO.MemoryMappedFiles; using System.Runtime.InteropServices; class Program { static void Main(string[] args) { long offset = 0x10000000; // 256 megabytes long length = 0x20000000; // 512 megabytes // Create the memory-mapped file. using (var mmf = MemoryMappedFile.CreateFromFile(@"c:\ExtremelyLargeImage.data", FileMode.Open,"ImgA")) { // Create a random access view, from the 256th megabyte (the offset) // to the 768th megabyte (the offset plus length). using (var accessor = mmf.CreateViewAccessor(offset, length)) { int colorSize = Marshal.SizeOf(typeof(MyColor)); MyColor color; // Make changes to the view. for (long i = 0; i < length; i += colorSize) { accessor.Read(i, out color); color.Brighten(10); accessor.Write(i, ref color); } } } } } public struct MyColor { public short Red; public short Green; public short Blue; public short Alpha; // Make the view brighter. public void Brighten(short value) { Red = (short)Math.Min(short.MaxValue, (int)Red + value); Green = (short)Math.Min(short.MaxValue, (int)Green + value); Blue = (short)Math.Min(short.MaxValue, (int)Blue + value); Alpha = (short)Math.Min(short.MaxValue, (int)Alpha + value); } } 

以下示例为另一个进程打开相同的内存映射文件。

 using System; using System.IO.MemoryMappedFiles; using System.Runtime.InteropServices; class Program { static void Main(string[] args) { // Assumes another process has created the memory-mapped file. using (var mmf = MemoryMappedFile.OpenExisting("ImgA")) { using (var accessor = mmf.CreateViewAccessor(4000000, 2000000)) { int colorSize = Marshal.SizeOf(typeof(MyColor)); MyColor color; // Make changes to the view. for (long i = 0; i < 1500000; i += colorSize) { accessor.Read(i, out color); color.Brighten(20); accessor.Write(i, ref color); } } } } } public struct MyColor { public short Red; public short Green; public short Blue; public short Alpha; // Make the view brigher. public void Brighten(short value) { Red = (short)Math.Min(short.MaxValue, (int)Red + value); Green = (short)Math.Min(short.MaxValue, (int)Green + value); Blue = (short)Math.Min(short.MaxValue, (int)Blue + value); Alpha = (short)Math.Min(short.MaxValue, (int)Alpha + value); } } 

您还可以在以下url阅读更多信息: http : //www.codeproject.com/Articles/138290/Programming-Memory-Mapped-Files-with-the-NET-Frame

我现在可以使用以下编码使用Memory Mapped File实现读取和写入文件:

 FileStream stream = File.OpenRead(@"D:\FFv1\dpx1\1.dpx"); byte[] fileBytes = new byte[stream.Length]; string Output = @"D:\Vanthiya Thevan\FFv1\dpx1\2.dpx"; using (var fileStream = new FileStream(Output, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) using (MemoryMappedFile memoryMapped = MemoryMappedFile.CreateFromFile(fileStream, "MapName", fileBytes.Length, MemoryMappedFileAccess.ReadWrite, new MemoryMappedFileSecurity(), HandleInheritability.Inheritable, true)) { var viewStream = memoryMapped.CreateViewStream(); viewStream.Write(fileBytes, 0, fileBytes.Length); }