2016-01-08 22 views
0

我从文件文本中读取所有行到列表<>。如何只更换1行列表中的1列?

但我有一个问题。我想在1行文件文本中仅更改1个元素(是列)。

当我发送电子邮件成功时,它会更新我检查的这一行的时间。

此数据在文件中的文本

User1    [email protected]   5/1/2016 

// many rows..... 

SendEmail成功后,它就会更新,如:

User1    [email protected]   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); 
    } 
} 

级磁盘文件:

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

在这种情况下,我不知道如何仅将'5/1/2016'更改为'8/1/2016'。只改变这个元素。不要添加1行。因为这个我的代码总是添加1行。我想在这一行中替换这次。 – lkajfds

+0

似乎没有随时可用的随机存取磁盘文件功能。看来你的主要选择是阅读整个文件;找到并修改该行,然后将其写回。它必须是一个磁盘文件?你有权访问任何类型的SQL服务器吗? –

回答

0

最简单的方法是删除你的文件的内容,然后重新创建更新的所有数据的新文件:

public static void Save(List<DTOSaveFromFile> Items) 
{ 
    File.Create(dataPath); 
    File.AppendAllLines(dataPath, (from i in Items select i.Serialize()).ToArray(), Encoding.Default); 
} 

如果列表中包含所有数据你都不会丢失任何东西。

+0

如何删除此文件?我在许多方面都是。这会发生吗? – lkajfds

+0

在你的代码中,我看不到任何foreach。您不需要删除该文件,因为如果文件存在,则“Create”已经删除该文件。在我的解决方案中,您必须在'List '中的项目的所有更新结束时调用Save。 – erikscandola