我从文件文本中读取所有行到List<>。
但我有一个问题。我想在1行文件文本中只更改1个元素(是列)。
当我发送电子邮件成功时,它会在此行中更新时间我检查。
此数据存档于文件
User1 abc@gmail.com 5/1/2016
// many rows.....
SendEmail成功后,它将更新如下:
User1 abc@gmail.com 8/1/2016
当前,我必须使用AppendAllLine()函数来添加行:
File.AppendAllLines(dataPath, (from i in Items select i.Serialize()).ToArray(), Encoding.Default);
我尝试过StreamWriter,但不支持:
from i in Items select i.Serialize()).ToArray()
这是我更新时间的代码。
if (time.Day == today.Day)
{
flag = SendMail.sendDailyMail(listMail);
if (flag == true)
{
rows.time = timeNow;
List<DTOSaveFromFile> lst = new List<DTOSaveFromFile>(1);
lst.Add(rows);
DiskFile.Save(lst);
}
}
Class DiskFile:
public static void Save(List<DTOSaveFromFile> Items)
{
File.AppendAllLines(dataPath, (from i in Items select i.Serialize()).ToArray(), Encoding.Default);
}
public static List<DTOSaveFromFile> Load()
{
string[] data = File.ReadAllLines(dataPath);
return (from i in data select new DTOSaveFromFile(i)).ToList<DTOSaveFromFile>();
}
答案 0 :(得分:0)
简单的方法是删除文件内容,然后重新创建包含所有数据更新的新文件:
public static void Save(List<DTOSaveFromFile> Items)
{
File.Create(dataPath);
File.AppendAllLines(dataPath, (from i in Items select i.Serialize()).ToArray(), Encoding.Default);
}
如果您的列表包含所有数据,则不会遗漏任何内容。