2012-03-28 38 views
96

我想創建一個.txt文件並寫入它,如果該文件已存在,我只想追加更多的行:如果不存在,創建一個.txt文件,如果它附加了一個新行

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

但是,第一行似乎總是被覆蓋......我怎樣才能避免寫在同一行(我使用循環)?

我知道這是一件非常簡單的事情,但我從未使用過WriteLine方法。我對C#完全陌生。

回答

113

使用correct constructor

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

第一個答案, 最簡單的答案, 對我笑最有用的答案。 當我看着它時,我是這樣的:嗯?只是加入「,真」就夠了?我以前怎麼看不到?該死......我覺得自己總是啞巴謝謝。我真的很喜歡這些有點好的答案。 – 2012-03-28 13:07:46

+3

提示:如果該文件不存在,則此構造函數將創建一個新文件。 – 2016-03-06 15:09:52

+1

將我包裹在使用中(請參閱下面的答案)。 – 2017-02-01 02:45:58

5

你只是想在 「追加」 模式打開該文件。

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

+0

這也是有用的,但我正在尋找一個快速和簡單的解決方案,並感謝@Daniel Hilgarth他提供了一個有點解決方案。所以+1。 – 2012-03-28 13:10:20

1

當您啓動的StreamWriter它覆蓋文本在那裏了。您可以使用附加屬性,像這樣:

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

另一個很好的答案,很好,謝謝。 +1 – 2012-03-28 13:11:43

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

參見File.AppendAllText()。 AppendAllLines將爲每行添加一個換行符,而不必自己將其放在那裏。

如果文件不存在,兩種方法都會創建該文件,因此您不必這樣做。

+0

這看起來像一個真正的好方法!謝謝。 – 2012-03-28 13:14:47

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

我也有同樣的問題,並找到這張海報,但在這裏的解決方案並不能解決我的問題。所以我使用了一些解決方案,並添加Dispose()。我的目標不涉及複製粘貼。 – Aek 2013-09-24 07:25:17

+0

我並不是說它確實如此;我在說,如果沒有在你的回答中包含這些信息,那麼原始的海報不會知道你爲什麼做了你所做的改變或者他們應該完成什麼。在發佈信息時始終包含所有相關信息,以便人們知道您正在做的所有事情。 :) – DiMono 2013-09-24 19:50:09

+0

好:)感謝您的建議:) – Aek 2013-09-25 21:26:49

10

你實際上並不需要檢查文件是否存在,如StreamWriter的會爲你做的。如果你以追加模式打開它,文件將被創建,如果它不存在,那麼你將永遠追加,永遠不會寫。所以你的初始檢查是多餘的。

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

來自微軟的文檔,如果不存在,追加到它在一個單一的通話 File.AppendAllText方法(字符串,字符串)

的.NET Framework(當前版本)其他版本

您可以創建文件

打開文件,將指定的字符串追加到文件中,然後關閉文件。如果該文件不存在,則此方法創建一個文件,將指定的字符串寫入該文件,然後關閉該文件。 命名空間:System.IO 程序集:mscorlib(在mscorlib中。DLL)

語法 C#C++ F#VB 公共靜態無效AppendAllText( 路徑字符串,字符串 內容 ) 參數 路徑 類型:System 文件到指定的字符串追加。 contents 類型:System.String 要附加到文件的字符串。

AppendAllText

0

File.AppendAllText添加一個字符串的文件。如果文件不存在,它也會創建一個文本文件。如果您不需要閱讀內容,則效率非常高。用例在日誌中。

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