首页 > 编程语言 >C#实现文件二进制存储

C#实现文件二进制存储

时间:2023-01-05 11:31:58浏览次数:53  
标签:存储 return C# 二进制 buffer new flstr 序列化 byte


private static BinaryFormatter Transfer = new BinaryFormatter(); 

public int BinaryFileSav()
{
//-----二进制文件写入并存储

saveFileDialog1.Filter = "数据文件(*.tifs)|*.tifs";
saveFileDialog1.Title = "文件存储";
saveFileDialog1.FileName = "新数据文件.tifs";
saveFileDialog1.ShowDialog();

Stream flstr = new FileStream(saveFileDialog1.FileName, FileMode.Create);
BinaryWriter sw = new BinaryWriter(flstr, Encoding.Unicode);
byte[] buffer = ChangeObjectToByte(obj);
sw.Write(buffer);

sw.Close();
flstr.Close();

return 0;
}

public int BinaryFileOpen()
{
//-----二进制文件读取
openFileDialog1.Filter = "数据文件(*.tifs)|*.tifs";
openFileDialog1.Title = "文件打开";
openFileDialog1.FileName = "";
openFileDialog1.ShowDialog();

Stream flstr = new FileStream(openFileDialog1.FileName, FileMode.Open);
BinaryReader sr = new BinaryReader(flstr, Encoding.Unicode);
byte[] buffer = sr.ReadBytes((int)flstr.Length);
FrameForm.Tifs.fileinfo = (FileInfo)ChangeByteToObject(buffer);

sr.Close();
flstr.Close();

return 0;
}


#region ArrayList数组的二进制转化实现

/// <summary>
/// 序列化,存储用
/// </summary>
/// <param name="msg">要序列化的对象</param>
/// <returns>转化成的byte</returns>
private static byte[] ChangeObjectToByte(object obj)
{
try
{
MemoryStream ms = new MemoryStream();
//----将对象序列化
Transfer.Serialize(ms, obj);
byte[] buffer = ms.GetBuffer();
return buffer;
}
catch (Exception err)
{
return null;
}
}

/// <summary>
/// 反序列化,读取用
/// </summary>
/// <param name="buffer">二进制流</param>
private static object ChangeByteToObject(byte[] buffer)
{
try
{
MemoryStream ms = new MemoryStream(buffer, 0, buffer.Length, true, true);
//----将流反序列化为对象
object obj = Transfer.Deserialize(ms);
return obj;
}
catch (Exception err)
{
return null;
}
}

#endregion

 

obj代表任意数据类型。另外,最好在该类前加注[Serializable] //----必须令相应的类实现可序列化标记接口

标签:存储,return,C#,二进制,buffer,new,flstr,序列化,byte
From: https://blog.51cto.com/kenkao/5989790

相关文章

  • C#实现TreeView向XML的绝对转换类
    从第一次接触XML开始就想写一个能实现tree和XML灵活转换的类了。写这个类大概用去了将近半天的时间,花的时间有些长了。呵呵。。好在收获颇多,熟练了XML的读写类,对C#中的forea......
  • 用hardhat 做ERC20转帐时报了 Nonce too high. Expected nonce to be 6 but got 11. N
    https://github.com/scaffold-eth/scaffold-eth/issues/476InMetamask,ensureyouareonyourdev/testaccountthen:clickontheavatarcircletoprightInthe......
  • mysql 5.7 增加regexp_replace函数
    CREATEDEFINER=`root`@`%`FUNCTION`regexp_replace`(ori_strLONGTEXT,patternVARCHAR(1000),repl_strVARCHAR(1000))RETURNSlongtextCHARSETutf8mb4DETERMI......
  • React的useLayoutEffect和useEffect执行时机有什么不同
    我们先看下React官方文档对这两个hook的介绍,建立个整体认识useEffect(create,deps):该Hook接收一个包含命令式、且可能有副作用代码的函数。在函数组件主体内(这......
  • React循环DOM时为什么需要添加key
    一、React渲染流程和更新流程react渲染流程:jsx->虚拟dom->真实domreact更新流程:props/state改变->render函数重新执行->生成新的虚拟dom树->新旧虚拟dom树进......
  • 校招前端二面常考react面试题(边面边更)
    高阶组件高阶函数:如果一个函数接受一个或多个函数作为参数或者返回一个函数就可称之为高阶函数。高阶组件:如果一个函数接受一个或多个组件作为参数并且返回一个组件就......
  • 如何在Java程序中合并和拆分Excel文档
    当我们需要储存或者计算大量数据时,常常会使用到Excel文档。一般情况下,一个工作簿中可以存在多个工作表以储存不同类别的数据内容。在分类整理文档时,我们不免会对Excel文档......
  • 前端一面常考react面试题
    类组件(Classcomponent)和函数式组件(Functionalcomponent)之间有何不同类组件不仅允许你使用更多额外的功能,如组件自身的状态和生命周期钩子,也能使组件直接访问store......
  • 对象存储服务MinIO的基本用法
    本文重要内容主要介绍MinIO与SpringBoot项目整合时的基本用法,没有涉及较多的原理剖析,更注重于应用实践(功能实现)。与SpringBoot整合的完整实例(代码可直接复用):https://git......
  • postgresql/lightdb的 is distinct from、is not distinct from
    在postgresql/lightdb开发过程中有时会用到is distinct from和isnotdistinctfrom这个功能。isdistinctfrom功能描述A和B的数据类型、值不完全相同返回tru......