Использовать удаленный файл с отображенной памятью

Пожалуйста, извините, если это плохой вопрос, так как я плохо умею работать с отображенными в память файлами. Я использую файлы с отображением памяти в моем проекте. Я отслеживаю файлы в процессе и файл, который уже обработан в файлах, отображенных в памяти. У меня есть два файла с отображенной памятью. В первом файле отображения памяти я отслеживаю обработанные файлы, а во втором файле отображения памяти я отслеживаю обрабатываемые файлы. Поэтому, когда обработка определенного файла завершена, я делаю запись в первом отображенном в память файле и удаляю запись из второго отображенного файла. Теперь проблема в том, что, если все файлы обработаны, я избавляюсь от второго объекта, отображенного в памяти. Но когда пользователь добавляет дополнительные файлы для обработки, я инициализирую новый объект файла с отображением в памяти с тем же именем, что и имя второго файла с отображением в памяти. И когда я пытаюсь получить доступ к этому второму файлу, он дает исключение«Безопасная ручка закрыта».

Пожалуйста, обратите внимание: я должен избавиться от второго объекта сопоставленного файла памяти.

Пожалуйста, предложите.

ПЕРВОЕ ОБНОВЛЕНИЕ Функция, которая записывает первый отображенный в память файл

Public void WriteFile()
{
    DialogResult result = folderBrowserDialog1.ShowDialog();
        if (result == DialogResult.OK)
         {
              mmf1 = MemoryMappedFile.OpenExisting("Some File Name1");
              Class1 Class1obj = new Class1();
              string foldername = folderBrowserDialog1.SelectedPath;
              Class1obj.CreateMMFFile1(foldername, mmf1, "MMF_IPC1");
         }
        Class1.RefreshExplorer();
}

Функция, которая записывает второй отображенный в память файл:

public void ProcessFiles()
        {
            DialogResult result = folderBrowserDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                mmf = MemoryMappedFile.OpenExisting("Some File Name");
                Class1 Class1obj = new Class1();
                string foldername = folderBrowserDialog1.SelectedPath;
                Class1obj.CreateMMFFile1(foldername, mmf, "MMF_IPC");
            }
            Class1.RefreshExplorer();            
        }

Функция, которая добавляет первый файл и удаляет второй файл.

Public void AppendFile()
{

  Class1 Class1obj = new Class1();
  string foldername = folderBrowserDialog1.SelectedPath;
  Class1obj.AppendToMMFFile(mmf1, "MMF_IPC1");
  Class1.RefreshExplorer();
  mmf.Dispose();

}

Теперь, когда пользователь добавляет новый файл для обработкиProcessFiles () Функция будет вызвана, и я получу исключение. Дайте мне знать, что еще я могу сделать, чтобы подробнее рассказать об этом.CreateMMFFile1 () а такжеCreateMMFFile () являются функцией, которая записывает отображенные в память файлы.

Второе ОБНОВЛЕНИЕ Вот функция AppendToMMFFile, которая добавляет данные первого файла MMF во второй файл MMF.

Public void AppendToMMFFile()
{
StringBuilder sb = new StringBuilder();
            string str = string.Empty;
            try
            {
                using (var stream = mmf.CreateViewStream())
                {
                    System.IO.BinaryReader reader = new System.IO.BinaryReader(stream, System.Text.Encoding.Unicode);
                    sb.Append(reader.ReadString());
                    sb.Append(str + "\r\n");
                }
                using (var stream = mmf1.CreateViewStream())
                {
                    System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream, System.Text.Encoding.Unicode);
                    writer.Write(sb.ToString());
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Unable to monitor memory file. " + ex);
            }
}

Ответы на вопрос(0)

Ваш ответ на вопрос