对二进制文件的疑问,想把数据保存在一个二进制文件里面,但是有个问题,先看这两个方法。。都是返回一个
BinaryWriter 
方法一:
public BinaryWriter GetBinaryWriter1()
{
       FileStream fs = new FileStream(Filepath, FileMode.Append);
            // 建立写流
       BinaryWriter w = new BinaryWriter(fs);
       return w;
}方法二:
public BinaryWriter GetBinaryWriter()
{
     if (File.Exists(Filepath))
     {
            FileInfo file = new FileInfo(Filepath);
            file.Delete();
      }
      FileStream fss = new FileStream(Filepath, FileMode.CreateNew);//创建文件
      fss.Close();//关闭文件   
      FileStream fs = new FileStream(Filepath, FileMode.Append);
            // 建立写流
      BinaryWriter w = new BinaryWriter(fs);
      return w;
}
得到BinaryReader 
public BinaryReader GetBinaryReader()
{
       FileStream fs = new FileStream(Filepath, FileMode.Open, FileAccess.Read);
       BinaryReader r = new BinaryReader(fs);
       return r;        
}
public IList<Product> GetList()
        {
            IList<Product> list = new List<Product>();
            BinaryReader r = this.GetBinaryReader();
            while (true)
            {
                Product product = new Product();
                try
                {
                    product.ProductsID = r.ReadString();
                    product.ProductsName = r.ReadString();
                    product.Level = r.ReadString();
                    product.Detail = r.ReadString();
                    list.Add(product);
                }
                catch
                {
                    break;
                }
            }
            r.Close();
            return list;
        }
数据先是从二进制文件里面读,把读出来的数据放在了DataGridView中,然后再通过DataGridView修改这些数据,然后再保存了
方法一是我在教材上面找的方法,方法一的问题就在于,对于修改过后的数据保存是往二进制文件的末追加数据,
方法二是我对方法一苦思不得其解决方法后,想出来的一个比较垃圾的方法。先把此文件删除了,再创建一个数据,虽然可以解决我现在的问题,但是总觉得不够好,我想问的是怎么判断二进制文件是否已经被修改,并且怎么修改二进制文件的数据。。
比如:二进制文件里的数通过DataGridView显示出来是1 产品1 等级1 详细1
2 产品2 等级2 详细2修改了后的数据形式1  产品1  等级1  详细1
2  产品22 等级2  详细2
3  产品3  等级3  详细3怎么才能把修改后的数据保存到二进制文件里,序号2 的现有产品名(产品22)覆盖二进制文件中的产品2,并且添加序号3的产品到二进制文件中。

解决方案 »

  1.   

    对象的二进制序列化,
    代码随便敲的,楼主自己整理一下.[Serializable]
        public class BinObject
        {
            public int Value1;
            public string Value2;
        } BinObject obj = new BinObject();
                BinaryFormatter bf = new BinaryFormatter();
                FileStream fs = new FileStream(fileName, FileMode.CreateNew);
                //序列化,obj->Binary
                bf.Serialize(fs, obj);
                //反序列化,Binary->obj
                obj = bf.Deserialize(fs) as BinObject;
      

  2.   

    想在二进制文件中修改指定的行 添加到指定的行  最好用数据库吧或者直接将DataSet序列化后保存成二进制  修改的时候再从二进制文件 反序列化