2012-01-23 8 views
6

Czy jest możliwe otwieranie pliku z mapami pamięci w języku C# bezpośrednio, podobnie jak otwieranie plików bezpośrednio w oknach, powiedzmy, na przykład, tworzę plik mapowany w pamięci. poprzez następujący kod.Obsługa mapowania pamięci w C# bezpośrednio z pamięci

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(); 
     } 
    } 
} 

Potrzebuję otworzyć plik bezpośrednio. Czy to możliwe, jak otwarcie pliku poprzez

Process.start("test.txt");

od innego procesu zamiast wartości czytanie kodu.

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

Czy możliwe jest bezpośrednie otwarcie pliku mapowanego w pamięci? Proszę daj mi znać.

+0

Dlaczego używasz pliku mapowanego w pamięci, aby wykonywać na nim proste operacje na plikach? – leppie

+0

choć prosta operacja na plikach, ale trudno uzyskać bezpośredni dostęp do pamięci, prawda? –

+0

Nigdzie w kodzie nie uzyskujesz dostępu do treści takich, jak twoje, czytasz pamięć. – leppie

Odpowiedz

4

Począwszy od wersji .NET Framework 4, można użyć kodu zarządzanego dostęp do plików w pamięci, w taki sam sposób, natywne funkcje systemu Windows dostępu pliki w pamięci, jak to opisano w Zarządzanie pamięci odwzorowany Pliki w Win32 w bibliotece MSDN.

+0

wszystko co mam na temat odczytu/zapisu pliku zmapowanego memeory, ale nie dostałem pliku memuorytu otwartego jako procesu –

2

Sposób MemoryMappedFile.CreateNew tworzy obiekt odwzorowania pliku, który nie jest związany z plikiem na dysku. Więc nie, nie możesz otworzyć pliku bezpośrednio, ponieważ go nie ma. (Takie pliki mapowania plików są wspierane przez systemowy plik stronicowania, jako described here.)

Zamiast tego można użyć metody MemoryMappedFile.CreateFromFile, aby powiązać obiekt odwzorowania pliku z rzeczywistym plikiem.