0

以下代码有什么问题?

        Stream inputstream = File.Open("e:\\read.txt", FileMode.Open);
        Stream writestream = File.Open("e:\\write.txt", FileMode.OpenOrCreate);

        do
        {
            writestream.WriteByte((byte)inputstream.ReadByte());
        }
        while (inputstream.ReadByte() != -1);

read.txt 有“快速棕色狐狸跳过懒狗”。

而 write.txt 文件包含的内容很少,只是略读“teqikbonfxjme vrtelz o”。

4

4 回答 4

9

您只写每隔一个字节,因为您在while支票中消耗了一个。

于 2012-10-18T17:52:00.293 回答
5

您只写入奇数字节,因为在where条件下进行另一次读取时您正在跳过偶数字节。

以这种方式修改您的代码:

int byteRead;
while((byteRead = inputstream.ReadByte()) != -1)
   writestream.WriteByte((byte)byteRead);

顺便说一句,您可以File.Copy("e:\\read.txt", "e:\\write.txt")改用。

于 2012-10-18T17:53:55.883 回答
2

试试这个:

while (inputstream.Position <= inputstream.Length)
{
    writestream.WriteByte((byte)inputstream.ReadByte());
}
于 2012-10-18T17:52:28.200 回答
1

inputstream.ReadByte()方法使您的光标移动一个。

您需要读取一次字节,如果不是 -1 则写入。就像这样:

int read = inputstream.ReadByte();
while (read != -1)
{ 
    writestream.WriteByte((byte)read ); 
    read = inputstream.ReadByte();
} 
于 2012-10-18T17:56:13.477 回答