2012-01-23 36 views
6

Es posible abrir el archivo mapeado en C# directamente como abrir archivos directamente en Windows, decir, por ejemplo, estoy creando un archivo mapeado en la memoria. a través del siguiente código.Manejo de la memoria asignada Archivo en C# directamente desde la memoria

using System; 
using System.IO.MemoryMappedFiles; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main() 
     { 
      MemoryMappedFile mmf = MemoryMappedFile.CreateNew("test.txt", 5); 
      MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor(); 
      var arun = new[] {(byte)'a', (byte)'r', (byte)'u', (byte)'n'}; 
      for (int i = 0; i < arun.Length; i++) 
       accessor.Write(i, arun[i]); 
      Console.WriteLine("Memory-mapped file created!"); 
      Console.ReadLine(); // pause till enter key is pressed 
      accessor.Dispose(); 
      mmf.Dispose(); 
     } 
    } 
} 

Necesito abrir el archivo directamente. ¿Es posible como la apertura de archivos a través de

Process.start("test.txt");

de otro proceso en lugar de los valores de lectura por el código.

MemoryMappedFile mmf1 = MemoryMappedFile.OpenExisting("test.txt"); 
MemoryMappedViewAccessor accessor1 = mmf1.CreateViewAccessor(); 
var value = accessor1.ReadByte(4);  

¿Es posible abrir el archivo asignado a la memoria directamente? Por favor hagamelo saber.

+0

¿Por qué está utilizando un archivo mapeado de memoria solo para realizar operaciones simples de archivos en él? – leppie

+0

aunque es una operación de archivo simple pero difícil de acceder directamente desde la memoria, ¿no es así? –

+0

En ningún lugar de su código está accediendo al contenido como si estuviera leyendo memoria. – leppie

Respuesta

4

A partir de la versión de .NET Framework 4, se puede utilizar código logrado acceder a los archivos mapeados en memoria de la misma manera que los nativos de Windows funciones de acceso a los archivos mapeados en memoria, tal como se describe en Administración asignados en memoria Archivos en Win32 en MSDN Library.

+0

todo lo que obtengo sobre la lectura/escritura del archivo memeory asignado pero no obtuve el archivo memeory mapeado como un proceso –

2

El método MemoryMappedFile.CreateNew crea un objeto de asignación de archivos que no está asociado con un archivo en el disco. Entonces, no, no puede abrir el archivo directamente, porque no hay uno. (Tales objetos de asignación de archivos están respaldados por el archivo de paginación del sistema, como described here.)

En su lugar, puede utilizar el método MemoryMappedFile.CreateFromFile si desea asociar el objeto de asignación de archivos con un archivo real.

Cuestiones relacionadas