对二进制文件的疑问,想把数据保存在一个二进制文件里面,但是有个问题,先看这两个方法。。都是返回一个
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的产品到二进制文件中。
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的产品到二进制文件中。
代码随便敲的,楼主自己整理一下.[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;