2010-06-18 19 views
20

Ho un oggetto dizionario di tipo DizionarioCome scrivere il contenuto di un dizionario in un file di testo?

e provare a utilizzare StreamWriter per generare l'intero contenuto in un file di testo ma non è riuscito a trovare il metodo corretto dalla classe Dizionario.

using (StreamWriter sw = new StreamWriter("myfile.txt")) 
     { 
      sw.WriteLine(dictionary.First()); 

     } 

posso recuperare solo il primo elemento ed è delimitata da una parentesi quadra più una virgola come separatore tra così:

[Peter, Admin]

e sarebbe bello avere [Peter Admin] (senza virgola)

risposta

24

Hai bisogno di un ciclo su voci da soli:

using (StreamWriter file = new StreamWriter("myfile.txt")) 
    foreach (var entry in dictionary) 
     file.WriteLine("[{0} {1}]", entry.Key, entry.Value); 
+0

Grazie, il mio collega ha fatto notare che posso fare qualcosa di simile ... foreach (KeyValuePair voce nel dizionario) sw.WriteLine (entry.Key + entry.Value); – Chris

0

È necessario selezionare le stringhe che si desidera scrivere e iterare l'enumerazione risultante di scrivere ogni riga:

var dataToWrite = from kvp in dictionary 
        select String.Format("[{0} {1}"], kvp.Key kvp.Value); 

using (StreamWriter sw = new StreamWriter("myfile.txt")) 
{ 
    foreach (string dataLine in dataToWrite) 
    { 
     sw.WriteLine(dataLine); 
    } 
} 
2
foreach (KeyValuePair<string,string> kvp in dictionary) 
{ 
    System.IO.File.AppendAllText("dictionary.txt", string.Format("{0} {1} {2}", kvp.Key, kvp.Value, Environment.NewLine)); 
} 
+0

+1 perché sto riscrivendo i metodi che portano gli elenchi a prendere i dizionari e invece voglio continuare a utilizzare i metodi di classe 'File' statici. Ma poi ho capito che questo apre e chiude il file ogni iterazione, che probabilmente non è una buona idea. – skwear

0
var pairs = from p in yourDictionary.Keys 
    select new {Key=p, Value=yourDictionary[p]}; 

foreach(var pair in pairs) 
    yourStreamWriter.WriteLine("Key={0}, Value={1}", pair.Key, pair.Value); 
29
File.WriteAllLines("myfile.txt", 
    dictionary.Select(x => "[" + x.Key + " " + x.Value + "]").ToArray()); 

(E se si sta utilizzando .NET4 allora si può omettere il ToArray chiamata finale.)

+4

Mi piacciono le soluzioni a una linea! –

+1

Suggerisco anche di renderlo un metodo di estensione. –

+1

stile csv: File.WriteAllLines ("myfile.txt", dictionary.Select (s => String.Format ("{0}; {1}", s.Key, s.Value))); –

1
File.WriteAllLines("myfile.txt",dictionary.Select(s=>s.ToString()); 

dovrebbe farlo come funzione ToString per l'elemento dizionario è definito mettere ogni elem ent nel seguente formato nel file di testo.

[key1,Value1] 
[key2,Value2] 
. 
. 
+0

Quanto sopra rende più facile aprire il file in un secondo momento in Excel e si avrà la chiave e il valore separati se si utilizza "myfile.csv" anziché "myfile.txt" – ambassallo

Problemi correlati