试了很多次,没有一次不是很失望,也找不到问题的解决办法,后来写了下面这个代码做测试,发现使用stream.Seek方法读取到的文件真的和原文件是不同的:前面有一大段是正确的,然后突然跳到后面很远的内容,为什么这么奇怪,哪位高手能帮忙一下,答对会再加分,不胜感激!long offset = -1;using (StreamReader reader1 = new StreamReader(path))
{
using (StreamWriter writer1 = new StreamWriter("D:\\hwind.txt"))
{
while (offset < 430561) {
offset++;
reader1.BaseStream.Seek(offset, SeekOrigin.Begin);
writer1.Write((char)reader1.Read());
}
}
}
{
using (StreamWriter writer1 = new StreamWriter("D:\\hwind.txt"))
{
while (offset < 430561) {
offset++;
reader1.BaseStream.Seek(offset, SeekOrigin.Begin);
writer1.Write((char)reader1.Read());
}
}
}
1楼的代码是顺序读所以说不需要Seek,确保从最开始读就可以了。跳跃式的读才需要Seek的。你需要判断StreamReader里面的内容是否读到文件末尾了。 long offset = -1; using (StreamReader reader1 = new StreamReader(path))
{
using (StreamWriter writer1 = new StreamWriter("D:\\hwind.txt"))
{
while (offset < 430561)
{ offset++;
reader1.BaseStream.Seek(offset, SeekOrigin.Begin);
int ch = reader1.Read();
if (ch == -1)
{
break;
}
writer1.Write((char)ch); }
}
}
//
// 摘要:
// 读取输入流中的下一个字符并使该字符的位置提升一个字符。
//
// 返回结果:
// 输入流中表示为 System.Int32 对象的下一个字符。如果不再有可用的字符,则为 -1。
//
// 异常:
// System.IO.IOException:
// 发生 I/O 错误。
public override int Read();
FileStream fs3 = new FileStream("D:\\hwind.txt", FileMode.Open, FileAccess.Read);
long iii = 0; long num = 0;
using (StreamReader reader2 = new StreamReader(fs2))
{
using (StreamReader reader3 = new StreamReader(fs3))
{
char chr2 = '\0';
char chr3 = '\0'; for(int i = 0; i < 430561; i++)
{
chr2 = (char)reader2.Read();
chr3 = (char)reader3.Read();
if (chr2 != chr3)
num++;
else
++iii;
}
}
}