2016-05-07 2 views
0

J'ai regardé à travers une autre question posée here pour obtenir le code que j'ai essayé.Enregistrer un dictionnaire dans un fichier binaire

J'ai donc un dictionnaire ici:

private static Dictionary<int, string> employees = new Dictionary<int, string>(); 
//the int key is for the id code, the string is for the name 

Supposons que le dictionnaire est rempli d'employés avec des noms et un code d'identification

et j'ai donc essayé cela « sauver » à l'aide d'un fichier binaire:

 FileStream binaryfile = new FileStream(@"..\..\data\employees.bin", FileMode.OpenOrCreate); 

     var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
     binaryFormatter.Serialize(@"..\..\data\employees.bin", employees); 

     binaryfile.Close(); 

Cependant, il semble que cette technique ne fonctionne que pour les objets.

ici est l'erreur que je reçois:

The best overloaded method match for 'System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(System.IO.Stream, object)' has some invalid arguments 

mon but est de récupérer simplement le dictionnaire enregistrée en lisant le fichier binaire. (si c'est possible?)

+1

Avez-vous considéré que l'un de vos arguments 'binayFormatter.Serialize' pourrait être incorrect? – yaakov

Répondre

1

Mis à jour.

Je pense que votre premier argument à votre sérialiseur est faux. Vous lui donnez une chaîne du chemin, et non l'objet du flux. Cela fonctionne pour moi (BTW - chemin d'accès relatif supprimé)

class Program 
{ 
    private static Dictionary<int, string> employees = new Dictionary<int, string>(); 
    static void Main(string[] args) 
    { 
     employees.Add(1, "Fred"); 
     var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 

     var fi = new System.IO.FileInfo(@"employees.bin"); 

     using (var binaryFile = fi.Create()) 
     { 
      binaryFormatter.Serialize(binaryFile, employees); 
      binaryFile.Flush(); 
     } 

     Dictionary<int, string> readBack; 
     using (var binaryFile = fi.OpenRead()) 
     { 
       readBack = (Dictionary < int, string>)binaryFormatter.Deserialize(binaryFile); 
     } 

     foreach (var kvp in readBack) 
      Console.WriteLine($"{kvp.Key}\t{kvp.Value}"); 
    } 
} 
+0

cela fonctionne pour moi aussi, merci! – redwa11