Consume descartado Arquivo mapeado de memória
Por favor, desculpe-me se esta é uma pergunta ruim, pois não sou bom com arquivos mapeados na memória. Estou usando arquivos mapeados de memória no meu projeto. Estou rastreando os arquivos em andamento e o arquivo que já foi processado nos arquivos mapeados na memória. Eu tenho dois arquivos mapeados de memória. No primeiro arquivo mapeado na memória, acompanho os arquivos processados e no segundo arquivo mapeado na memória, acompanho os arquivos em processamento. Portanto, quando o processamento é concluído em um arquivo específico, faço uma entrada no primeiro arquivo mapeado na memória e removo a entrada do segundo arquivo mapeado. Agora, o problema é que, se todos os arquivos forem processados, estou descartando o segundo objeto de arquivo mapeado na memória. Mas quando o usuário adiciona mais arquivos para processamento, estou inicializando um novo objeto de arquivo mapeado na memória com o mesmo nome que o segundo nome do arquivo mapeado na memória. E quando tento acessar esse segundo arquivo, ele dá uma exceção "o identificador de segurança foi fechado".
Observe: eu tenho que descartar o segundo objeto de arquivo mapeado na memóri
Por favor sugira
PRIMEIRA ATUALIZAÇÃO Função que grava o primeiro arquivo mapeado na memória
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();
}
Função que grava o segundo arquivo mapeado na memória:
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();
}
unção que anexa o primeiro arquivo e descarta o segundo arquiv
Public void AppendFile()
{
Class1 Class1obj = new Class1();
string foldername = folderBrowserDialog1.SelectedPath;
Class1obj.AppendToMMFFile(mmf1, "MMF_IPC1");
Class1.RefreshExplorer();
mmf.Dispose();
}
gora, quando o usuário adiciona um novo arquivo para processar oProcessFiles () função @ será chamada e eu recebo uma exceção. Deixe-me saber o que mais posso fazer para elaborar mais sobre isso. O CreateMMFFile1 () eCreateMMFFile ()ão funções que gravam arquivos mapeados na memóri
Second UPDATE Aqui está a função AppendToMMFFile, que acrescenta os primeiros dados do arquivo MMF no segundo arquivo MM
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);
}
}