我不太清楚这个问题的答案是什么,所以我很感激信息,以帮助我更好地理解我在这里所拥有的。我的目标是将文本文件的内容读入列表,解析信息并删除孤立记录(在文件中没有关联父记录/行的子记录/行),然后将剩余的行写回文件按顺序。
我使用以下方法
IList<String> lines = File.ReadAll(Filepath);
IList<String> secondlines = lines.Copy();
foreach (String line in lines)
{
If Brecord
foreach String record in secondlines
{
if record is same as Brecord
//No Parent record found for this Brecord before it
Delete record
else if record is Parent of Brecord
exit loop
}
}
File.WriteAll(secondlines , SecondPath)
如何确保每次发生这种情况时,文件的内容都按文件中出现的顺序处理?
答案 0 :(得分:2)
没有方法File.ReadAll
。
方法File.ReadAllLines
和File.ReadLines
已经按正确的顺序返回文件的行。所以你不需要做任何事情来确保这一点。
(它们之间的区别在于File.ReadAllLines
一次将整个文件读入内存,并为您提供一个包含完整文件内容的数组,而File.ReadLines
是惰性的,只有在您读取文件时foreach
通过返回的对象。在最后一种情况下,您不必读取所有文件,并且整个文件不必一次在内存中,因为您读取“逐行”。)
答案 1 :(得分:0)
nott 100%确定你的if语句在做什么,但为什么不使用Linq
var lines = File.ReadAll(filepath)
.Where(x=>( x.Something == "something else"));
File.WriteAll (lines, SecondPath)
或在您的情况下更可能
var lines = File.ReadAll(filePath).Distinct();
这应该保持行读入列表的顺序。 在foreach循环期间修改对象的内容时也需要小心
答案 2 :(得分:0)
除非您在某处明确地对它们进行排序或重新排序,否则您应该已经按照它们在文件中出现的顺序看到了事情。
IList
的Framework对象本质上是有序的File.ReadAllLines
按照文本文件显示的顺序返回文本文件中的行列表。IList
对foreach
进行枚举,按顺序访问每个元素。File.WriteAllLines
按顺序将字符串写入新文件。由于您粘贴的代码实际上并不是您正在使用的代码,因此无法确定您是否正在执行更微妙的操作,这会破坏输入列表中元素的顺序。特别是,我对你如何做
非常感兴趣 delete record
部分,因为在枚举期间无法更改IList
。我的怀疑是,无论你做什么来制作你的第二个无重复列表,你的问题实际上就在哪里。