我编写了这段代码来计算文本文件中的字符数:
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。
答案 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());