可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I would like to create a .txt file and write to it, and if the file already exists I just want to append some more lines:
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();
}
But the first line seems to always get overwritten... how can I avoid writing on the same line (I'm using this in a loop)?
I know it's a pretty simple thing, but I never used the WriteLine
method before. I'm totally new to C#.
回答1:
Use the correct constructor:
else if (File.Exists(path))
{
using(var tw = new StreamWriter(path, true))
{
tw.WriteLine("The next line!");
}
}
回答2:
string path = @"E:\AppServ\Example.txt";
File.AppendAllLines(path, new [] { "The very first line!" });
See also File.AppendAllText(). AppendAllLines will add a newline to each line without having to put it there yourself.
Both methods will create the file if it doesn't exist so you don't have to.
- File.AppendAllText
- File.AppendAllLines
回答3:
string path=@"E:\AppServ\Example.txt";
if(!File.Exists(path))
{
File.Create(path).Dispose();
using( TextWriter tw = new StreamWriter(path))
{
tw.WriteLine("The very first line!");
}
}
else if (File.Exists(path))
{
using(TextWriter tw = new StreamWriter(path))
{
tw.WriteLine("The next line!");
}
}
回答4:
You don't actually have to check if the file exists, as StreamWriter will do that for you. If you open it in append-mode, the file will be created if it does not exists, then you will always append and never over write. So your initial check is redundant.
TextWriter tw = new StreamWriter(path, true);
tw.WriteLine("The next line!");
tw.Close();
回答5:
You just want to open the file in "append" mode.
http://msdn.microsoft.com/en-us/library/3zc0w663.aspx
回答6:
else if (File.Exists(path))
{
using (StreamWriter w = File.AppendText(path))
{
w.WriteLine("The next line!");
w.Close();
}
}
回答7:
You could use a FileStream. This does all the work for you.
http://www.csharp-examples.net/filestream-open-file/
回答8:
When you start StreamWriter it's override the text was there before. You can use append property like so:
TextWriter t = new StreamWriter(path, true);
回答9:
File.AppendAllText adds a string to a file. It also creates a text file if the file does not exist. If you don't need to read content, it's very efficient. The use case is logging.
File.AppendAllText("C:\\log.txt", "hello world\n");
回答10:
From microsoft documentation, you can create file if not exist and append to it in a single call
File.AppendAllText Method (String, String)
.NET Framework (current version) Other Versions
Opens a file, appends the specified string to the file, and then closes the file. If the file does not exist, this method creates a file, writes the specified string to the file, then closes the file.
Namespace: System.IO
Assembly: mscorlib (in mscorlib.dll)
Syntax
C#C++F#VB
public static void AppendAllText(
string path,
string contents
)
Parameters
path
Type: System.String
The file to append the specified string to.
contents
Type: System.String
The string to append to the file.
AppendAllText
回答11:
using(var tw = new StreamWriter(path, File.Exists(path)))
{
tw.WriteLine(message);
}
回答12:
Try this.
string path = @"E:\AppServ\Example.txt";
if (!File.Exists(path))
{
using (var txtFile = File.AppendText(path))
{
txtFile.WriteLine("The very first line!");
}
}
else if (File.Exists(path))
{
using (var txtFile = File.AppendText(path))
{
txtFile.WriteLine("The next line!");
}
}