C#实现文件二进制存储

[c-sharp:nogutter] view plaincopyprint?
  1. private static BinaryFormatter Transfer = new BinaryFormatter();   
  2.   
  3. public int BinaryFileSav()  
  4. {  
  5.     //-----二进制文件写入并存储   
  6.   
  7.     saveFileDialog1.Filter = "数据文件(*.tifs)|*.tifs";  
  8.     saveFileDialog1.Title = "文件存储";  
  9.     saveFileDialog1.FileName = "新数据文件.tifs";  
  10.     saveFileDialog1.ShowDialog();  
  11.   
  12.     Stream flstr = new FileStream(saveFileDialog1.FileName, FileMode.Create);  
  13.     BinaryWriter sw = new BinaryWriter(flstr, Encoding.Unicode);  
  14.     byte[] buffer = ChangeObjectToByte(obj);  
  15.     sw.Write(buffer);  
  16.   
  17.     sw.Close();  
  18.     flstr.Close();  
  19.   
  20.     return 0;  
  21. }  
  22.   
  23. public int BinaryFileOpen()  
  24. {  
  25.     //-----二进制文件读取   
  26.     openFileDialog1.Filter = "数据文件(*.tifs)|*.tifs";  
  27.     openFileDialog1.Title = "文件打开";  
  28.     openFileDialog1.FileName = "";  
  29.     openFileDialog1.ShowDialog();  
  30.   
  31.     Stream flstr = new FileStream(openFileDialog1.FileName, FileMode.Open);  
  32.     BinaryReader sr = new BinaryReader(flstr, Encoding.Unicode);  
  33.     byte[] buffer = sr.ReadBytes((int)flstr.Length);  
  34.     FrameForm.Tifs.fileinfo = (FileInfo)ChangeByteToObject(buffer);  
  35.   
  36.     sr.Close();  
  37.     flstr.Close();  
  38.      
  39.     return 0;  
  40. }  
  41.  
  42.  
  43. #region ArrayList数组的二进制转化实现   
  44.   
  45. /// <summary>    
  46. /// 序列化,存储用   
  47. /// </summary>    
  48. /// <param name="msg">要序列化的对象</param>    
  49. /// <returns>转化成的byte</returns>    
  50. private static byte[] ChangeObjectToByte(object obj)  
  51. {  
  52.     try  
  53.     {  
  54.         MemoryStream ms = new MemoryStream();  
  55.         //----将对象序列化    
  56.         Transfer.Serialize(ms, obj);  
  57.         byte[] buffer = ms.GetBuffer();  
  58.         return buffer;  
  59.     }  
  60.     catch (Exception err)  
  61.     {  
  62.         return null;  
  63.     }  
  64. }  
  65.   
  66. /// <summary>    
  67. /// 反序列化,读取用   
  68. /// </summary>    
  69. /// <param name="buffer">二进制流</param>    
  70. private static object ChangeByteToObject(byte[] buffer)  
  71. {  
  72.     try  
  73.     {  
  74.         MemoryStream ms = new MemoryStream(buffer, 0, buffer.Length, truetrue);  
  75.         //----将流反序列化为对象    
  76.         object obj = Transfer.Deserialize(ms);  
  77.         return obj;  
  78.     }  
  79.     catch (Exception err)  
  80.     {  
  81.         return null;  
  82.     }  
  83. }  
  84.  
  85. #endregion  

 

 

 

obj代表任意数据类型。另外,最好在该类前加注

[c-sharp:nogutter] view plaincopyprint?
  1. [Serializable] //----必须令相应的类实现可序列化标记接口  
posted @ 2012-08-15 20:06  Net-Spider  阅读(2759)  评论(0)    收藏  举报