Чтение, запись, добавление, удаление отображенного файла памяти - PullRequest
4 голосов
/ 01 марта 2012

В моем приложении для 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);
            }
        }

Если кто-нибудь может мне помочь, это будет очень признательно.

Ответы [ 2 ]

1 голос
/ 01 марта 2012

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

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

0 голосов
/ 15 января 2018

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

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

Ознакомьтесь с этой статьей , чтобы понять, как вы можете обмениваться данными между процессами, используя MMF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...