首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# File.ReadAllLines和StreamReader.ReadLine分裂几行

C# File.ReadAllLines和StreamReader.ReadLine分裂几行
EN

Stack Overflow用户
提问于 2014-11-22 04:57:27
回答 2查看 4.8K关注 0票数 2

我在工作中有一个项目,根据一组任意规则读取和转换CSV文件,选择一个文件,告诉程序如何根据输入输出数据,并解析该文件。

我遇到的问题是,当我从输入文件中读取行时,有时会读取额外的行或将行拆分成两行,我最初使用的是ReadAllLines,然后用以下代码进行了测试:

代码语言:javascript
运行
复制
int testCount = 0;
StreamReader sr = File.OpenText(_FilePath.Text);
while(!sr.EndOfStream)
{
    sr.ReadLine();
    testCount++;
}
sr.Close();
sr.Dispose();

Console.WriteLine("Lines in For: " + testCount);

并发现有627行的文件被读取为有681行(同时使用ReadAllLines和上面代码中的行数)。

我试着寻找有同样问题的人,并试图看看在这些方法中是否有“行”的最大长度,在google上什么也没有出现,文件中的第一行就是这一行(为了保护隐私,所有特殊字符都存在)。

代码语言:javascript
运行
复制
CODE, A/B Company Name, CONTACT NAME, ATTN  NAME A/B, 1234 CORPORATE CORP ST, Smithington, SM, 1234, , 123-456-7890, 123-456-7890, 12345 Plum ROAD, , Nowhere, NW, 12345, A/B Company Name2, Courier, , "Some A Info B For.Shipping Accnt. # 123456789 calendar days early^ 3 days late.", , 

该文件本身已从excel电子表格导出到CSV,原始文件中的所有逗号都被^替换为^(以防止问题),稍后将重新转换为逗号。

因此,有人知道ReadAllLines中一行长度的限制,或者在幕后还有其他的事情发生吗?因为这是从Excel导出的(最初是一个DBF文件),所以我不认为这是文件的问题,但是我可能错了,我可以做些什么来找出答案?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-22 05:07:33

我保证File.ReadAllLines()StreamReader.ReadLine()的行为都和文献记录的完全一样,没有任何隐藏的陷阱可以让你绊倒。

请注意,这两种模式都不能区分不同的换行模式。在单个文件中,它们将很高兴地打破\r\n\r\n上的一行。请注意,这意味着一个名义上使用\r\n标准的文件,但其中包含额外的\r和/或\n字符,将被解释为有额外的换行。还请注意,虽然\r\n被视为单行中断,而\n\r则被视为两个换行。

准确诊断所发生的事情的方法是将文件视为二进制文件。首先,检查您的输出,看看它在哪里打破了线,特别是在第一个地方,您发现它打破了一条线,你认为它不应该有。

然后,在Visual中打开该文件,但不只是打开它,而是选择“opening .”选项(单击“打开”按钮上的黑色三角形),并选择“二进制编辑器”。通过文件查找第一个不需要的行中断发生的文本,并在该位置检查文件中的十六进制值。您将在那里找到一些\r\n\r\n的组合(\r是十六进制值0D\n0A)。

票数 3
EN

Stack Overflow用户

发布于 2014-11-22 05:11:06

在读取文件时,请指定文件的编码。默认情况下,File.OpenText使用UTF8编码。试试这个:

代码语言:javascript
运行
复制
string[] lines = File.ReadAllLines(path, encoding); //UTF-16 or ASCII etc

http://msdn.microsoft.com/en-us/library/bsy4fhsa(v=vs.110).aspx

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27074206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档