// 读写文件,如果读出的字符非法则不写入新文件
但在调试中遇到如下问题,代码如下:FileStream fileStreamOld = new FileStream(fileNameOld, FileMode.Open);   
FileStream fileStreamNew = new FileStream(fileNameNew, FileMode.Create);int iResult = 0;
while((iResult = fileStreamOld.ReadByte()) >= 0)
{
//FileStream fileStreamBackup = fileStreamOld;   // A
FileStream fileStreamTemp = fileStreamOld;
int iTemp = fileStreamTemp.ReadByte();    // 加上这一句后会每隔一个字符写入新文件,也就是fileStreamTemp 的改变会影响到fileStreamOld,加上A,B两句不仅不能起到备份的作用而且三个变量都改变了,为何呢? 多谢!
string strSearch = iTemp.ToString();
if (strSearch.Equals("a"))
{
MessageBox.Show("Message");
}
fileStreamNew.WriteByte((Byte)iResult);
//fileStreamOld = fileStreamBackup;           // B
}
fileStreamOld.Close();
fileStreamNew.Close();

解决方案 »

  1.   

    也就是怎么才能保存 fileStreamOld 的位置呢?
    不知道C#中是怎样处理 FileStream 变量的,请各位指点一下,多谢!
      

  2.   

    int iTemp = fileStreamTemp.ReadByte();    // 加上这一句后会每隔一个字符写入新文件,也就是fileStreamTemp 的改变会影响到fileStreamOld,加上A,B两句不仅不能起到备份的作用而且三个变量都改变了,为何呢? 多谢!
    -----------
    当然会影响了,fileStreamTemp 和fileStreamOld指向的是同一块内存,除非你把fileStreamOld中的数据copy到fileStreamTemp 中.
      

  3.   

    多谢楼上,不过我觉得楼上用“指向”的说法不太恰当,在C#中FileStream变量是没有被处理为指针的,这又是为何那样写会出现问题,FileStream变量就是一个纯粹的对象,fileStreamOld和fileStreamTemp的关系如同 :int i = 10;
    int j = i;
    j = 20;
    MessageBox.Show(i.ToString());一样。
      

  4.   

    因为FileStream是引用类型,fileStreamTemp、fileStreamOld都指向同一内存,所以修改fileStreamTemp相当于在修改fileStreamOld!