2012-03-01 6 views
3

Dans mon application Windows, je souhaite utiliser des fichiers mappés en mémoire. Il existe divers article/blogs sur le net qui a assez d'informations pour créer des fichiers mappés en mémoire. Je crée 2 fichiers mappés en mémoire et maintenant je veux faire des actions sur ces fichiers comme lire son contenu, y ajouter du contenu, en supprimer du contenu. Il y a peut-être plus d'infos sur le net pour tout cela, mais malheureusement je n'ai rien trouvé. Voici la fonction que j'utilise pour écrire un fichier mappé en mémoire.Lecture, écriture, ajout, suppression de fichiers mappés en mémoire

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

Si quelqu'un peut m'aider, ce serait vraiment apprécié.

+0

Quelle partie des [exemples de documentation MSDN] (http://msdn.microsoft.com/en-us/library/dd997372.aspx) rencontrez-vous spécifiquement un problème de compréhension? –

+0

Je n'ai rien dit de tel. Vote bas? Raison?? –

+0

La documentation (et spécifiquement l'exemple dans la documentation) contient un exemple de lecture et d'écriture de/vers un fichier MMF, donc je suis confus; que demandez-vous? –

Répondre

1

Je pense que la classe que vous recherchez est la MemoryMappedViewAccessor. Il fournit des méthodes pour lire et écrire dans votre fichier mappé en mémoire. Une suppression n'est rien de plus qu'une série d'écritures soigneusement orchestrées.

Il peut être créé à partir de votre classe MemoryMappedFile en utilisant la méthode CreateViewAccessor.

0

Dans ce code, j'ai fait quelque chose de similaire à ce que vous voulez implémenter. Je vous écris au MMF chaque seconde, vous pouvez avoir d'autres processus de lecture du contenu de ce fichier:

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

Jetez un oeil à this article, pour comprendre comment vous pouvez partager des données entre les processus utilisant MMF.

+0

Bien que ce lien puisse répondre à la question, il vaut mieux inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [De l'examen] (/ review/low-quality-posts/18517303) – Jobin

Questions connexes