2012-03-28 77 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"); 
相关问题