【发布时间】:2023-09-20 07:19:01
【问题描述】:
我有一个 Winform 控件来编写笔记,其内容会定期上传到服务器。 我需要创建一个本地文件作为备份来保存笔记的内容。 当我在便笺框中键入文本时,内容仍保留在便笺框中并保存到本地文本文件中。但是,当我在便笺框中输入更多文本时,以前的内容以及新内容都会附加到本地文件中。 如何确保仅将最近的内容附加到本地文件?如果我清除便笺框内容,则不会有任何内容登录到服务器。
private void btnNote_Click(object sender, EventArgs e)
{
Note noteFrm = new Note();
//set Note Text
noteFrm.NoteText = _timeCard.NoteText;
if (noteFrm.ShowDialog() == DialogResult.OK)
{
//Save notes locally as well
string path = @"C:\QB Notes\";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string projname = this._timeCard.Project.ProjectName.TrimEnd()+".txt";
string fileloc = path + projname;
// FileStream fs = null;
if (!File.Exists(fileloc))
{
using (TextWriter txt = new StreamWriter(fileloc))
{
// TextWriter txt = new StreamWriter(fileloc);
txt.Write(noteFrm.NoteText + Environment.NewLine);
txt.Close();
}
}
else if (File.Exists(fileloc))
{
using (var txt = new StreamWriter(fileloc, true))
{
txt.BaseStream.Seek(0, SeekOrigin.End);
txt.Write(noteFrm.NoteText + Environment.NewLine);
txt.Close();
}
}
//noteFrm.NoteText="";
//get Note Text
_timeCard.NoteText = noteFrm.NoteText;
Utils.LogManager.write("New Note Text: " + noteFrm.NoteText);
}
}
【问题讨论】:
-
定义“最近的内容”。记住最后保存的字符的字符索引是否足够?如果您返回并编辑已保存的内容怎么办?只写整个文件而不是追加文件可以吗?
-
保存时覆盖文件不是更容易吗?例如,如果他们回去修复错字怎么办?试图管理这一切将是一场噩梦。
-
我想覆盖整个文件是可以的,但你能告诉我如何从特定索引读取和写入吗? @Wyck
-
@V_stack 您可以使用
File.AppendAllText将文本添加到文件末尾。但是你不能在不重写整个文件的情况下将文本添加到文件中间(你需要读取文件,插入文本,然后替换整个文件) -
覆盖整个内容的问题是,我正在处理的应用程序经常崩溃。当它崩溃时,注释框中的数据会丢失最后一个数据条目,如果只是再次向其中添加新数据而不先将本地文件中的内容复制到它,我会丢失该数据条目,因为它会替换整个文件.我不确定我是否解释得很好。 @Wyck
标签: c# winforms file streamwriter