2012-03-01 8 views
3

В моем приложении Windows я хочу использовать файлы с отображением памяти. В сети есть различные статьи/блоги, в которых достаточно информации для создания файлов с отображением памяти. Я создаю 2 файла с отображением памяти, и теперь я хочу сделать некоторые действия над этими файлами, например, прочитать его содержимое, добавить в него некоторый контент, удалить из него некоторый контент. На все это может быть больше информации, но, к сожалению, я ничего не нашел. Ниже приведена функция, которую я использую для записи файла с отображением памяти.Чтение, запись, добавление, удаление файла с памятью памяти

// Stores the path to the selected folder in the memory mapped file 
     public void CreateMMFFile(string folderName, MemoryMappedFile mmf, string fileName) 
     { 
      // Lock 
      bool mutexCreated; 
      Mutex mutex = new Mutex(true, fileName, out mutexCreated); 
      try 
      { 
       using (MemoryMappedViewStream stream = mmf.CreateViewStream()) 
       { 
        using (StreamWriter writer = new StreamWriter(stream, System.Text.Encoding.Unicode)) 
        { 
         try 
         { 
          string[] files = System.IO.Directory.GetFiles(folderName, "*.*", System.IO.SearchOption.AllDirectories); 
          foreach (string str in files) 
          { 
           writer.WriteLine(str); 
          } 
         } 
         catch (Exception ex) 
         { 
          Debug.WriteLine("Unable to write string. " + ex); 
         } 
         finally 
         { 
          mutex.ReleaseMutex(); 
         } 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       Debug.WriteLine("Unable to monitor memory file. " + ex); 
      } 
     } 

Если кто-нибудь может мне помочь, это было бы действительно оценено.

+0

В какой части [примеров документации MSDN] (http://msdn.microsoft.com/en-us/library/dd997372.aspx) возникает проблема с пониманием проблемы? –

+0

Я не говорил ничего подобного. Проголосовать? Причина ?? –

+0

Документация (и, в частности, пример в документации) содержит пример чтения и записи из/в MMF, поэтому я запутался; что ты спрашиваешь? –

ответ

1

Я думаю, что класс, который вы ищете, это MemoryMappedViewAccessor. Он предоставляет методы для чтения и записи в ваш файл с отображением памяти. Удаление - это не что иное, как серия тщательно организованных записей.

Он может быть создан с вашего MemoryMappedFile классом с использованием метода CreateViewAccessor.

0

В этом коде я сделал что-то похожее на то, что вы хотите реализовать. Я пишу ММФ каждую секунду, вы можете иметь другой процесс чтения контента из этого файла:

var data = new SharedData 
{ 
    Id = 1, 
    Value = 0 
}; 

var mutex = new Mutex(false, "MmfMutex"); 

using (var mmf = MemoryMappedFile.CreateOrOpen("MyMMF", Marshal.SizeOf(data))) 
{ 
    using (var accessor = mmf.CreateViewAccessor()) 
    { 
      while (true) 
      { 
       mutex.WaitOne(); 
       accessor.Write(0, ref data); 
       mutex.ReleaseMutex(); 

       Console.WriteLine($"Updated Value to: {data.Value}"); 
       data.Value++; 
       Thread.Sleep(1000); 
      } 
    } 
} 

Посмотрите на this article, чтобы понять, как вы можете обмениваться данными между процессами с использованием ММФ.

+0

Хотя эта ссылка может ответить на вопрос, лучше укажите основные части ответа здесь и укажите ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/18517303) – Jobin