我是否只需将其加载到数组中删除所选行并将其保存回来?还是有更有效的方式?
示例:
ddddd,aaaa,dddd,
ffff fffff,ffff,
ffff,ffff sssss,
ssss,dddd,ffff
我需要在数组中加载所有这些,找到我想删除的行并删除它。然后将其保存在旧文件上。
答案 0 :(得分:1)
无法删除文本文件的一部分并自动将所有剩余数据移位以填充其位置。做这样的事情的唯一方法是重写文件。
如您所述,最简单的解决方案是将整个文件加载到内存中,在内存中对其进行修改,然后使用内存中修改过的文件覆盖原始文件。该方法的缺点是您必须同时将整个文件加载到内存中。如果文件特别大,那可能会有问题。
如果需要考虑文件大小,则需要采用其他方法。例如,您可以打开两个文件流 - 一个用于读取原始文件(源),另一个用于写出已修改的文件(目标)。您可以从源流中一次读取一条记录,然后仅将其输出到目标流(如果它是您希望保留的记录)。完成后,您可以删除原始文件,然后重命名目标文件以取代它。它可能更复杂,也有点慢,但是这样你一次只能在内存中加载一条以上的记录。
根据您的评论,下面是一个简单的示例,说明如何将文件加载到字符串数组中(文件中每行一个字符串),然后将这些行输出到控制台:
Dim lines() As String = File.ReadAllLines("test.csv")
For Each line As String In lines
Console.WriteLine(line)
Next