2014-11-26 2 views
3

Мне нужно разделить переменное значение из приложения «A» в разные приложения на той же системе. Мне нужно использовать только MemoryMappedFiles согласно требованию. Я создал еще один простой App «B», который считывает значение общей переменной из App А. Но App «B» дает ошибкуОбмен переменной с использованием MemoryMappedFile дает ошибку

Не удается найти указанный файл.

Sample App А и B написана на C# с помощью VS 2012:

На кнопки мыши случае приложение А делить имя переменной:

private void button1_Click(object sender, EventArgs e) 
{ 
    string Name = txtName.Text.ToString(); 
    int howManyBytes = Name.Length * sizeof(Char) + 4; 
    label1.Text = howManyBytes.ToString(); 

    using (var MyText = MemoryMappedFile.CreateOrOpen("MyGlobalData", howManyBytes, MemoryMappedFileAccess.ReadWrite)) 
    { 
     byte[] array1 = new byte[howManyBytes]; 
     array1 = GetBytes(Name); 

     using (var accessor = MyText.CreateViewAccessor(0, array1.Length)) 
     { 
      accessor.WriteArray(0, array1, 0, array1.Length); 
     } 
    } 

} 

static byte[] GetBytes(string str) 
{ 
    byte[] bytes = new byte[str.Length * sizeof(char)]; 
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); 
    return bytes; 
} 

На кнопки мыши случае приложения B для чтения общей переменной MyGlobalData:

try 
{ 
    using (var mmf = MemoryMappedFile.OpenExisting("MyGlobalData")) 
    { 
     using (var accessor = mmf.CreateViewAccessor(0, 34)) 
     { 
      byte[] array1 = new byte[34]; 
      accessor.ReadArray(0, array1, 0, array1.Length); 

      string result = System.Text.Encoding.UTF8.GetString(array1); 
      txtName.Text = result; 
     } 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(" Error :- " + ex.Message.ToString()); 
} 

При попытке прочитать общую переменную из App В это дает ошибку

Не удается найти указанный файл

мне нужно написать значение переменной в текстовом файле, а затем поделиться им делать?

ответ

2

память файлы, отображенные два типа

  • сохранялась память отображается файл
  • Non сохранялись память отображается файл

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

Вам либо необходимо оставить MMF открытым, либо использовать Файл с сохраненной сохраненной памятью. Чтобы сохранить MMF открытым, просто не используйте его.

For more information

+0

Позвольте мне попробовать .. способ, предложенный вами. – sia

+0

спасибо ... это сработало .. – sia

Смежные вопросы