c#中的新行字符

时间:2013-04-15 13:57:09

标签: c# newline

我编写了这段代码来计算文本文件中的字符数:

sr.BaseStream.Position = 0;
sr.DiscardBufferedData();
int Ccount = 0;
while (sr.Peek() != -1)
{
  sr.Read();
  Ccount++;
}

但将此代码应用于文件后包含:

1
2
3
4
5
6
7
8
9
0

Ccount = 30 ???? 为什么? 我在Macbook上的虚拟盒子上使用Windows Xp 使用的程序:Microsoft Visual Basic 2010。

5 个答案:

答案 0 :(得分:15)

在Windows中,每个新行都包含两个字符\r\n。您有10行,每行有1个可见字符和2个新行字符,最多可添加30个字符。

如果您在Mac或Unix / Linux中创建了文件,则会产生不同的结果(20个字符)。因为Unix仅使用\n而Mac仅使用\r作为新行。

您可以使用一些编辑器(如Notepad ++)向您显示新行字符,甚至可以在不同模式(DOS / Unix / Mac)之间切换。

答案 1 :(得分:14)

您一次只读一个字符,每行包含三个字符:

  • 一位数
  • 一次回车(\r
  • 一个换行符(\n

(Windows使用\r\n作为换行符序列。您在Mac上的VM中运行的事实并不会影响它。)

答案 2 :(得分:3)

有一种更简单的方法可以做到这一点。将整个* .txt文件转换为字符串数组并进行测量:

int count = 0;

string[] Text = File.ReadAllLines(/*Path to the file here*/);

for (int i = 0; i < Text.Count(); i++)
{
        count += Text[i].Length;
}

答案 3 :(得分:2)

新行实际上是2个单独的字符:LF CR(换行和回车)。但是如果你在循环中放置一个断点,你就会知道。现在需要额外的功劳,unicode中有多少字节?

答案 4 :(得分:2)

Windows通常使用\r\n表示新行,即ASCII字符0x13和0x10。

建议您通过这样做证明这一点:

Console.WriteLine("0x{0:x}", sr.Read());