我的类包含写入文件的构造函数方法
class Writer
{
public Writer(string filename, List<string> data)
{
FileStream ostrm;
StreamWriter writer;
TextWriter oldOut = Console.Out;
try
{
ostrm = new FileStream("C:/Users/kyle/Desktop/ConferenceSoftware/" + filename + ".txt", FileMode.OpenOrCreate, FileAccess.Write);
writer = new StreamWriter( ostrm );
}
catch (Exception e)
{
Console.WriteLine("Cannot open " + filename + ".txt for writing");
Console.WriteLine(e.Message);
return;
}
Console.SetOut(writer);
foreach (var _data in data)
{
Console.WriteLine( _data );
}
Console.SetOut(oldOut);
writer.Close();
ostrm.Close();
}
}
在我的主要方法中:
List<string> dataToAdd = new List<string>();
dataToAdd.Add("Example");
new Writer(Settings.ConferenceRoomName, dataToAdd);
但是,如果我已在文件中包含文本,而是从最后一行追加到该文件,则从第一行开始,即:
Example // new added through method
Line that already exists // already in file
Line that already exists // already in file
// this is where I wanted it but it goes to the top
任何帮助都会受到赞赏,我不知道我可以在哪里找到开始写作的行。
提前致谢。
答案 0 :(得分:3)
当您使用FileStream
创建新的FileMode.OpenOrCreate
时,它会覆盖现有文件。如果您要附加到该文件,请改为使用FileMode.Append
:
FileMode.Append
:打开文件(如果存在)并搜索到文件末尾,或创建新文件。这需要FileIOPermissionAccess.Append
权限。
ostrm = new FileStream("C:/Users/kyle/Desktop/ConferenceSoftware/" + filename + ".txt", FileMode.Append, FileAccess.Write);
答案 1 :(得分:3)
您需要使用OpenOrCreate
代替ostrm = new FileStream("C:/Users/kyle/Desktop/ConferenceSoftware/" +
filename + ".txt", FileMode.Append, FileAccess.Write);
:
FileMode.Append
请参阅MSDN(关于{{1}}):
打开文件(如果存在)并搜索到文件末尾,或创建新文件。这需要FileIOPermissionAccess.Append权限。 FileMode.Append只能与FileAccess.Write ...
一起使用
因此,如果文件不存在,它也会创建文件
如果您不想创建不存在的文件,可以在打开流之前使用File.Exists()
检查它是否存在。
答案 2 :(得分:1)
您需要文件模式Append
而不是OpenOrCreate
:
ostrm = new FileStream("C:/Users/kyle/Desktop/ConferenceSoftware/" + filename + ".txt", FileMode.Append, FileAccess.Write);
如果它不存在,两者都会创建一个新文件,不同之处在于OpenOrCreate
开始在文件的开头写入,Append
开始在文件末尾写入。