如何只替换1行列表中的1列?

时间:2016-01-08 08:18:16

标签: c#

我从文件文本中读取所有行到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>();
}

1 个答案:

答案 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);
}

如果您的列表包含所有数据,则不会遗漏任何内容。