File.ReadAllLines() - 读取比文件中的行更多的行作为空条目

时间:2017-08-08 21:37:09

标签: c# .net wpf

我遇到一个问题,我的文件文件为[filename] .config,我使用File.ReadAllLines()方法读取其中的每一行。该文件只有97行,但当我读入它时,它有3,973行存储在string []数组中。 97行都是准确的,但其余的是一堆空行。我在网上搜索了这里,但是没有看到这个。

var file = File.ReadAllLines(mainConfigFile);是我用于调试文件读取的代码行。只是在调试模式下查看值。

任何人都知道我不理解的东西?

enter image description here

1 个答案:

答案 0 :(得分:4)

ReadAllLines被打破的可能性极小(尽管可能很远)。更有可能的是,该函数定义为换行符分隔符与您正在查看文件的程序定义为换行符分隔符的内容不同。在MSDN docs中,您会发现:

  

一条线被定义为一个字符序列,后跟一个滑架   返回(' \ r'),换行(' \ n')或立即回车   然后换行。

因此,例如,如果您的最后一行以回车符和1000行换行结束,ReadAllLines将返回所有这些尾随换行符的空行(空字符串)。但是,如果你打开文件的程序只将回车+换行视为换行,你就不会在其中看到一堆空行。

请注意,由于编写ReadAllLines的方式,尽管结果中可以得到空字符串,但返回的字符串数组中的元素永远不会为空。当它读取行时,它会查找从它用作文件结尾的指示的ReadLine方法返回的null。当它变为null时,它将停止读取,并且不会将null添加到结果中。

一种可能性是它与ReadAllLines无关,而是你的实际配置文件发生了一些事情(ReadAllLines显示了这一点)。某些过程可能会巧妙地将cruft添加到您的文件中。类似于旧bug in the config transform的东西,或者在复制文件时或通过源代码控制重复往返转换Windows样式换行符与Unix样式换行符。