2012-01-23 20 views
6

È possibile aprire il file di memoria mappato in C# direttamente come l'apertura di file direttamente in Windows, ad esempio, , sto creando un file mappato in memoria. attraverso il seguente codice.Gestione file di memoria mappato in C# direttamente dalla 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(); 
     } 
    } 
} 

Ho bisogno di aprire il file direttamente. E 'possibile, come file di apertura attraverso

Process.start("test.txt");

da un altro processo, invece di valori di lettura dal codice.

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

Se è possibile aprire direttamente il file di memoria mappato? Per favore mi faccia sapere.

+0

Perché si sta utilizzando un file mappato in memoria solo per eseguire semplici operazioni sui file? – leppie

+0

sebbene sia un'operazione di file semplice ma difficile da accedere direttamente dalla memoria, vero? –

+0

In nessun punto del tuo codice stai accedendo al contenuto come se tu leggessi memoria. – leppie

risposta

4

partire dalla versione .NET Framework 4, è possibile utilizzare codice gestito di accedere ai file mappati in memoria nello stesso modo che i nativi di Windows funzioni accedere ai file mappati in memoria, come descritto in Gestione memory-mapped File in Win32 nella MSDN Library.

+0

tutto ciò che ottengo sulla lettura/scrittura del file mappato memeory ma non ho ottenuto il file mappato memeory aperto come un processo –

2

Il metodo MemoryMappedFile.CreateNew crea un oggetto di mapping di file che non è associato con un file su disco. Quindi no, non puoi aprire il file direttamente, perché non ce n'è uno. (Tali oggetti di mappatura dei file sono supportati dal file di paging del sistema, come described here.)

È possibile utilizzare invece il metodo MemoryMappedFile.CreateFromFile se si desidera associare l'oggetto di mappatura file a un file effettivo.