2012-03-28 19 views
96

Vorrei creare un file .txt e scrivere ad esso, e se il file esiste già voglio solo aggiungere altre righe :Crea un file .txt se non esiste, e se aggiunge una nuova riga

string path = @"E:\AppServ\Example.txt"; 
if (!File.Exists(path)) 
{ 
    File.Create(path); 
    TextWriter tw = new StreamWriter(path); 
    tw.WriteLine("The very first line!"); 
    tw.Close(); 
} 
else if (File.Exists(path)) 
{ 
    TextWriter tw = new StreamWriter(path); 
    tw.WriteLine("The next line!"); 
    tw.Close(); 
} 

Ma la prima linea sembra avere sempre sovrascritti ... come posso evitare di scrivere sulla stessa linea (sto usando questo in un ciclo)?

So che è una cosa piuttosto semplice, ma non ho mai usato il metodo WriteLine prima. Sono totalmente nuovo di C#.

risposta

113

Utilizzare la correct constructor:

else if (File.Exists(path)) 
{ 
    using(var tw = new StreamWriter(path, true)) 
    { 
     tw.WriteLine("The next line!"); 
    } 
} 
+7

Prima risposta, risposta più semplice, risposta più utile per me lol. Quando l'ho guardato, ho pensato: Huh? è sufficiente aggiungere ", vero"? Come mai non lo vedrò prima? Dannazione ... mi sentivo un totale stupido grazie. Prevedo davvero queste buone risposte. –

+3

suggerimento: se il file non esiste, questo costruttore crea un nuovo file. –

+1

avvolgere in un utilizzo (vedere risposta sotto). –

5

Hai voglia di aprire il file in modalità "aggiungi".

http://msdn.microsoft.com/en-us/library/3zc0w663.aspx

+0

sì, anche questo è utile, ma stavo cercando una soluzione semplice e veloce e grazie a @Daniel Hilgarth ha fornito quella sorta di soluzione. quindi +1. –

1

Quando si avvia StreamWriter è sovrascrivere il testo c'era prima. È possibile utilizzare la proprietà di aggiunta in questo modo:

TextWriter t = new StreamWriter(path, true); 
4
else if (File.Exists(path)) 
{ 
    using (StreamWriter w = File.AppendText(path)) 
     { 
      w.WriteLine("The next line!"); 
      w.Close(); 
     } 
} 
+0

un'altra bella risposta che funziona bene grazie. +1 –

35
string path = @"E:\AppServ\Example.txt"; 
File.AppendAllLines(path, new [] { "The very first line!" }); 

Vedere anche File.AppendAllText(). AppendAllLines aggiungerà una nuova riga a ogni riga senza doverla inserire da solo.

Entrambi i metodi creeranno il file se non esiste, quindi non è necessario.

+0

questo sembra davvero un buon modo! Grazie. –

20
string [email protected]"E:\AppServ\Example.txt"; 

if(!File.Exists(path)) 
    { 
     File.Create(path).Dispose(); 
     using(TextWriter tw = new StreamWriter(path)) 
     { 
      tw.WriteLine("The very first line!"); 
      tw.Close(); 
     } 

} 

    else if (File.Exists(path)) 
    { 
     using(TextWriter tw = new StreamWriter(path)) 
     { 
      tw.WriteLine("The next line!"); 
      tw.Close(); 
     } 
    } 
+0

Anche io ho lo stesso problema, e trovo questo poster ma le soluzioni qui non risolvono il mio problema. Quindi uso alcuni pezzi di soluzione e aggiungo semplicemente Dispose(). Il mio obiettivo non riguarda il copia-incolla. – Aek

+0

Non sto suggerendo di averlo fatto; Sto dicendo che senza includere ciò nella tua risposta, il poster originale non saprà perché hai fatto i cambiamenti che hai fatto o che cosa dovrebbero realizzare. Includere sempre tutte le informazioni rilevanti quando pubblichi, in modo che le persone sappiano tutto quello che stai facendo. :) – DiMono

+0

Ok :) grazie per i vostri consigli :) – Aek

10

In realtà non controlla se il file esiste, come StreamWriter lo farà per voi. Se lo si apre in append-mode, il file verrà creato se non esiste, quindi verrà sempre aggiunto e mai sovrascritto. Quindi il tuo controllo iniziale è ridondante.

TextWriter tw = new StreamWriter(path, true); 
tw.WriteLine("The next line!"); 
tw.Close(); 
0

Da documentazione di Microsoft, è possibile creare file se non esiste e aggiungere ad esso in una singola chiamata File.AppendAllText Method (String, String)

.NET Framework (versione attuale) Altre versioni

Apre un file, aggiunge la stringa specificata al file e quindi chiude il file. Se il file non esiste, questo metodo crea un file, scrive la stringa specificata nel file, quindi chiude il file. Spazio dei nomi: System.IO Assemblaggio: mscorlib (in mscorlib.dll)

Sintassi C# C++ F # VB vuoto AppendAllText ( string path, contenuti pubblici static String ) Parametri percorso Tipo: System.String Il file da aggiungere la stringa specificata . indice Tipo: System.String La stringa da aggiungere al file.

AppendAllText

0

File.AppendAllText aggiunge una stringa in un file. Crea anche un file di testo se il file non esiste. Se non hai bisogno di leggere il contenuto, è molto efficiente. Il caso d'uso sta registrando.

File.AppendAllText("C:\\log.txt", "hello world\n");