10

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

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

计数 = 30 ???? 为什么?我在我的 Macbook 上的虚拟机上使用 Windows Xp,使用的程序是:Microsoft Visual Basic 2010。

4

5 回答 5

15

在 Windows 中,每个新行由两个字符\r\n. 您有 10 行,每行有 1 个可见字符和 2 个换行符,总计 30 个字符。

如果您在 Mac 或 Unix/Linux 中创建文件,您将得到不同的结果(20 个字符)。因为 Unix 仅使用\n而 Mac 仅\r用于换行。

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

于 2013-04-15T13:59:22.123 回答
14

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

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

(Windows 将\r\n其用作换行符序列。您在 Mac 上的 VM 中运行这一事实不会影响这一点。)

于 2013-04-15T13:59:08.317 回答
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;
}
于 2013-04-15T14:01:21.203 回答
2

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

于 2013-04-15T13:59:41.537 回答
2

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

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

Console.WriteLine("0x{0:x}", sr.Read());
于 2013-04-15T13:59:48.367 回答