有一个文件是将结构体二进制序列化后得到的。(此文件中有N条记录,每条记录均为一个结构体)
现在想要打开此文件,将其中的某条记录删除(简单起见可以视为删除第一条记录,即删除第一个结构体)。应该怎么写啊?
我试着将第一条记录用stream.write替换为null,可是提示不能写入空的内容。我的代码:stream.Write(null, 0, (int)position); //position为第一条记录的尾地址
可是stream里并没有删除的方法啊???
即使可以替换为空的话,那第二条记录开始的地址又到底是文件开头还是原来的地址呢???
请大虾们帮帮忙啊!!!谢谢了
现在想要打开此文件,将其中的某条记录删除(简单起见可以视为删除第一条记录,即删除第一个结构体)。应该怎么写啊?
我试着将第一条记录用stream.write替换为null,可是提示不能写入空的内容。我的代码:stream.Write(null, 0, (int)position); //position为第一条记录的尾地址
可是stream里并没有删除的方法啊???
即使可以替换为空的话,那第二条记录开始的地址又到底是文件开头还是原来的地址呢???
请大虾们帮帮忙啊!!!谢谢了
1、要是文件比较大呢,那是不是效率就不高了呢?
2、要如何反序列化读出所有结构体?反序列化得到的结构体暂存到哪里?如果暂存到结构体数组的话,那我并不知道文件中结构体的个数,如何来new这个结构体数组呢?
3、关于“重新序列化到同名称的文件”,因为stream是独享的,如果不关掉这个stream的话重新序列化到相同的文件会不会报错啊?
刚学c#不久,很多东东还不懂,麻烦各位大虾指点一番啊!
可以使用列表如ArrayList,不必非使用数组。
//关于“重新序列化到同名称的文件”,因为stream是独享的,如果不关掉这个stream的话重新序列化到相同的文件会不会报错啊?
可以用打开空文件的方法,重新写文件
因为第一个结构体的长度不一定(不同的文件的第一条记录长度不一样),所以不可能用
byte[] space={ , , ,}和stream.Write(space,0,(int)position); //position为此文件第一条记录的尾地址,当文件确定后这个地址可以确定,但不同文件的这个position不同
之类的来替换吧。具体要怎么实现呢?