2013-12-17 9 views
7

Ho una lista di 369 nomi diversi e voglio stampare questi nomi in un file csv. Tutto sta andando bene fino a quando guardo il file csv emesso e ha solo 251 righe. Ho provato invece l'output in un file .txt, e tuttavia restituisce solo 251 righe. Ive è intervenuto con il debugger e sta ancora chiamando writer.WriteLine() 369 volte.Perché il mio programma C# scrive solo 251 righe su un file?

C'è qualche tipo di limitazione della scrittura in atto? Se è così, perché 251? Come scrivo tutti i 369 nomi?

Ecco il mio codice solo nel caso in cui:

List<String> names = new List<String>(); 

//Retrieve names from a separate source. 

var writer = new StreamWriter(File.OpenWrite(@"C:names.txt")); 
     for (int i = 0; i < names.Count; i++) 
     { 
      System.Console.WriteLine(names[i].ToString()); 
      writer.WriteLine(names[i].ToString()); 
     } 
     System.Console.Write(names.Count); 

L'uscita sulla console mostra tutti i 369 nomi e le stampe names.Count 369.

+3

Chiudi lo scrittore – jglouie

+0

puoi condividere il file di testo che usi per lo svuotamento di – Raymund

+0

, vale a dire la parola – TravellingGeek

risposta

11

È necessario chiudere lo StreamWriter, il modo migliore è quello di utilizzare un blocco using in questo modo:

using(StreamWriter writer = new StreamWriter(File.OpenWrite("C:\\names.txt")) { 
    // code here 
} 

Il using blocco sarà sempre chiamata al metodo di StreamWriter.Dispose che ha l'effetto di irrigare il flusso. Al momento disponi di dati bufferizzati ma non scritti nell'istanza StreamWriter.

+0

Grazie! Semplicemente chiamando writer.close ha funzionato, ma farò in modo di iniziare a usare 'using' da ora in poi. Non posso credere che sia stato un errore così semplice ... –

4

non si presenta nessuna parte che si correttamente vicino writer. Se il programma termina in modo anomalo, lo scrittore non verrebbe mai scaricato su disco.

Provare a utilizzare un blocco using.

// NOTE: The is should be C:\names.txt. The posted code is missing a \ 
using (var writer = new StreamWriter(File.OpenWrite(@"C:names.txt"))) 
{ 
    // Your code here 
} 
0
List<String> names = new List<String>(); 
var sb = new StringBuilder() 
//Retrieve names from a separate source. 


     for (int i = 0; i < names.Count; i++) 
     { 
      System.Console.WriteLine(names[i].ToString()); 
      sb.WriteLine(names[i].ToString()); 
     } 
using (var writer = new StreamWriter(File.OpenWrite(@"C:\names.txt"))) 
{ 
    writer.WriteLine(sb.ToString()); 
} 
1

È necessario svuotare il buffer dopo l'ultima scrittura. Metti scrittore dentro usando una dichiarazione. Il metodo di eliminazione del writer svuota il buffer. Puoi anche chiamare writer.Flush(). Ma dal momento che devi ancora assicurarti che lo scrittore sia disposto, basta metterlo in una dichiarazione usando come suggerito da altri.

+0

La semplice chiamata 'Dispose()' non è la stessa cosa di 'using', a meno che' Dispose() 'non sia in un blocco' finally'. –

+0

@EricJ. Sì hai ragione. –

Problemi correlati