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#.
15 Answers
Use the correct constructor:
else if (File.Exists(path))
{ using(var tw = new StreamWriter(path, true)) { tw.WriteLine("The next line!"); }
} 5 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.
2string 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!"); }
} 6 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(); 1 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"); 3 You just want to open the file in "append" mode.
1You can just use File.AppendAllText() Method this will solve your problem. This method will take care of File Creation if not available, opening and closing the file.
var outputPath = @"E:\Example.txt";
var data = "Example Data";
File.AppendAllText(outputPath, data); 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); 0 else if (File.Exists(path))
{ using (StreamWriter w = File.AppendText(path)) { w.WriteLine("The next line!"); w.Close(); } } 2 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!"); }
} 3 You could use a FileStream. This does all the work for you.
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.
using(var tw = new StreamWriter(path, File.Exists(path)))
{ tw.WriteLine(message);
} 1 .NET Core Console App:
public static string RootDir() => Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, @"..\..\..\"));
string _OutputPath = RootDir() + "\\Output\\" + "MyFile.txt";
if (!File.Exists(_OutputPath)) File.Create(_OutputPath).Dispose();
using (TextWriter _StreamWriter = new StreamWriter(_OutputPath))
{ _StreamWriter.WriteLine(strOriginalText);
} Please note that AppendAllLines and AppendAllText methods only create the file, but not the path. So if you are trying to create a file in "C:\Folder", please ensure that this path exists.