有一个文件是将结构体二进制序列化后得到的。(此文件中有N条记录,每条记录均为一个结构体)
现在想要打开此文件,将其中的某条记录删除(简单起见可以视为删除第一条记录,即删除第一个结构体)。应该怎么写啊?
我试着将第一条记录用stream.write替换为null,可是提示不能写入空的内容。我的代码:stream.Write(null,  0,  (int)position);  //position为第一条记录的尾地址
可是stream里并没有删除的方法啊???
即使可以替换为空的话,那第二条记录开始的地址又到底是文件开头还是原来的地址呢???
请大虾们帮帮忙啊!!!谢谢了

解决方案 »

  1.   

    to jackyped
    1、要是文件比较大呢,那是不是效率就不高了呢?
    2、要如何反序列化读出所有结构体?反序列化得到的结构体暂存到哪里?如果暂存到结构体数组的话,那我并不知道文件中结构体的个数,如何来new这个结构体数组呢?
    3、关于“重新序列化到同名称的文件”,因为stream是独享的,如果不关掉这个stream的话重新序列化到相同的文件会不会报错啊?
    刚学c#不久,很多东东还不懂,麻烦各位大虾指点一番啊!
      

  2.   

    //如果暂存到结构体数组的话,那我并不知道文件中结构体的个数,如何来new这个结构体数组呢?
    可以使用列表如ArrayList,不必非使用数组。
    //关于“重新序列化到同名称的文件”,因为stream是独享的,如果不关掉这个stream的话重新序列化到相同的文件会不会报错啊?
    可以用打开空文件的方法,重新写文件
      

  3.   

    那能否把第一条替换为空格呢?
    因为第一个结构体的长度不一定(不同的文件的第一条记录长度不一样),所以不可能用
    byte[] space={ , , ,}和stream.Write(space,0,(int)position);  //position为此文件第一条记录的尾地址,当文件确定后这个地址可以确定,但不同文件的这个position不同
    之类的来替换吧。具体要怎么实现呢?