System.IO.StreamReader xx = new System.IO.StreamReader("a.txt");
int getB = xx.BaseStream.ReadByte();
int add = 0;
while (getB != -1)
{
if (getB == 13 || getB == 10)
{
add++;
if (getB == 13 && xx.BaseStream.ReadByte() == 10) //这行开始
xx.BaseStream.Position++;
}
getB = xx.BaseStream.ReadByte(); }帮忙解释下这3行...有点看不懂..谢谢。..
int getB = xx.BaseStream.ReadByte();
int add = 0;
while (getB != -1)
{
if (getB == 13 || getB == 10)
{
add++;
if (getB == 13 && xx.BaseStream.ReadByte() == 10) //这行开始
xx.BaseStream.Position++;
}
getB = xx.BaseStream.ReadByte(); }帮忙解释下这3行...有点看不懂..谢谢。..
System.IO.StreamReader xx = new System.IO.StreamReader("a.txt");
//读取一个字节
int getB = xx.BaseStream.ReadByte();
//初始化计数器add(实际换行符的个数)
int add = 0;
//循环结束的条件是读到-1
while (getB != -1)
{
//判断是否回车或者换行除
if (getB == 13 || getB == 10)
{
//是回车或者换行符的话,计数+1;
add++;
//这里加入一个判断:如果遇到一个回车,并且下一个字符是换行符,则读取位置再向前移一位。
//这里应该是有一个BUG。xx.BaseStream.ReadByte()==10,这一个判断也会导致Position向是移一位。
//这样分析:
//如果当前位置值为13,且一下位置为10,则指向了10之后的第一个字节,即13之后的第二个。接下来的getB = xx.BaseStream.ReadByte();将读出这一字节。
//如果当前位置为13,且下一位置不为10,则指向了13之后的第二个字节,那么13之后的第一个字节的内容将不会被判断。
if (getB == 13 && xx.BaseStream.ReadByte() == 10) //这行开始
xx.BaseStream.Position++;
}
getB = xx.BaseStream.ReadByte();
}
StreamReader xx = new StreamReader("a.txt", System.Text.Encoding.Default);
这样读就没乱码了。..
我想知道只替换第3行的数据.其它几行不变动.怎么实现?
只替换第三行的数据这种问题如果要完美解决很麻烦。一般是全部读取,在内存中替换第三行,然后再全部写回。
我想再转回去是打什么命令的?
在读取流时,它有一个指针或者说有一个位置标志,表示下一个即将读取的位置(也可以理解为当前已经读取到的位置)。当你调用ReadByte()时从这里开始读一个字节。
如果你的转回去是把这个指针往后移(已经读过的),那么在你的代码中已经出现了:
BaseStream.Position++; //这是往前移动
BaseStream.Position--; //这是往后移动(向已经读过的那个方向)
没乱码的。..
现在显示出来又有乱码了。..