C#读取写入文件的3种方式示例代码

作者:时间里的 时间:2022-09-15 06:57:38 

最新对文件的操作比较频繁。这里记录一下常用的几种文件读写的方式。

我这里使用窗体来做测试。

1:二进制读写

/// <summary>
       /// 二进制写入文件
       /// </summary>
       private void button1_Click(object sender, EventArgs e)
       {
           SaveFileDialog saveDlg = new SaveFileDialog();
           saveDlg.FileName = "File";
           saveDlg.Title = "保存数据";
           saveDlg.Filter = "File(*.txt)|*.txt";
           saveDlg.DefaultExt = "txt";
           saveDlg.AddExtension = true;
           //saveDlg.InitialDirectory = "D:AMC Results";
           if (saveDlg.ShowDialog() == DialogResult.OK)
           {
               Cursor = Cursors.WaitCursor;
               SaveDatafileWithNewVersion(saveDlg.FileName);
               Cursor = Cursors.Default;
           }
       }

/// <summary>
       /// 二进制保存文件
       /// </summary>
       public static void SaveDatafileWithNewVersion(String sFile)
       {
           //文件格式依次为:内部版本号,...
           Stream stream = File.Open(sFile, FileMode.Create);
           BinaryWriter bw = new BinaryWriter(stream);
           bw.Write((Int16)1);//内部版本号,暂时用1,表示版本1,整型
           ///写入Config对象
           bw.Write("泽国江山入战图
");
           bw.Write("生民何计乐樵苏
");
           bw.Write("凭君莫话封侯事
");
           bw.Write("一将功成万骨枯
");
           bw.Close();
           stream.Close();
       }

/// <summary>
       /// 打开文件
       /// </summary>
       private void button2_Click(object sender, EventArgs e)
       {
           OpenFileDialog openDlg = new OpenFileDialog();
           openDlg.Title = "File";
           openDlg.Filter = "File (*.txt)|*.txt";

if (openDlg.ShowDialog() == DialogResult.OK)
           {
               BinaryReader br = new BinaryReader(new FileStream(openDlg.FileName,
               FileMode.Open));
               string str = "";
               int number = br.ReadInt16();
               str += br.ReadString();
               str += br.ReadString();
               str += br.ReadString();
               str += br.ReadString();

richTextBox1.Text = str;
               br.Close();
           }
       }

2:泛型读写:

/// <summary>
       /// 泛型写入
       /// </summary>
       private void button3_Click(object sender, EventArgs e)
       {
           SaveFileDialog saveDlg = new SaveFileDialog();
           saveDlg.FileName = "File";
           saveDlg.Title = "保存数据";
           saveDlg.Filter = "File(*.txt)|*.txt";
           saveDlg.DefaultExt = "txt";
           saveDlg.AddExtension = true;
           //saveDlg.InitialDirectory = "D:AMC Results";
           if (saveDlg.ShowDialog() == DialogResult.OK)
           {
               string str = "泽国江山入战图
生民何计乐樵苏
凭君莫话封侯事
一将功成万骨枯
";
               BinarySerialize<string>(str, saveDlg.FileName);
           }
       }

/// <summary>
       /// 写入文件
       /// </summary>
       /// <typeparam name="T">类型</typeparam>
       /// <param name="obj">写入类型</param>
       /// <param name="path">路径</param>
       public static void BinarySerialize<T>(T obj, string path)
       {

FileStream fileStream = new FileStream(path, FileMode.Create);
           BinaryFormatter b = new BinaryFormatter();
           try
           {
               b.Serialize(fileStream, obj);
               fileStream.Close();
           }
           catch (System.Exception ex)
           {
               Console.WriteLine(ex.Message);
           }
           finally
           {
               if (fileStream != null)
               {
                   fileStream.Close();
                   fileStream.Dispose();
               }
           }
       }

/// <summary>
       /// 泛型读取
       /// </summary>
       private void button4_Click(object sender, EventArgs e)
       {
           OpenFileDialog openDlg = new OpenFileDialog();
           openDlg.Title = "File";
           openDlg.Filter = "File (*.txt)|*.txt";

if (openDlg.ShowDialog() == DialogResult.OK)
           {
               string str = BinaryDeserialize<string>(openDlg.FileName);
               richTextBox2.Text = str;
           }
       }

/// <summary>
       /// 读取文件
       /// </summary>
       /// <typeparam name="T">类型</typeparam>
       /// <param name="path">路径</param>
       /// <returns></returns>
       public static T BinaryDeserialize<T>(string path)
       {
           FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
           BinaryFormatter b = new BinaryFormatter();    //SoapFormatter
           T rs;
           try
           {
               rs = (T)b.Deserialize(fileStream);
               return rs;
           }
           catch (System.Exception ex)
           {
               Console.WriteLine(ex.Message);
           }
           finally
           {
               if (fileStream != null)
               {
                   fileStream.Close();
                   fileStream.Dispose();
               }
           }
           return default(T);
       }

3:XML读写:不是很稳定

/// <summary>
       /// XML写入
       /// </summary>
       private void button5_Click(object sender, EventArgs e)
       {
           SaveFileDialog saveDlg = new SaveFileDialog();
           saveDlg.FileName = "File";
           saveDlg.Title = "保存数据";
           saveDlg.Filter = "File(*.txt)|*.txt";
           saveDlg.DefaultExt = "txt";
           saveDlg.AddExtension = true;
           //saveDlg.InitialDirectory = "D:AMC Results";
           if (saveDlg.ShowDialog() == DialogResult.OK)
           {
               string str = "泽国江山入战图
生民何计乐樵苏
凭君莫话封侯事
一将功成万骨枯
";
               SerializeToXml<string>(saveDlg.FileName, str);
           }
       }

/// <summary>    
       /// XML序列化某一类型到指定的文件
       /// /// </summary>  
       /// /// <param name="filePath">文件路径</param>  
       /// /// <param name="obj">写入对象</param>
       /// /// <param name="type"></param>  
       public static void SerializeToXml<T>(string filePath, T obj)
       {
           try
           {
               using (System.IO.StreamWriter writer = new System.IO.StreamWriter(filePath))
               {
                   System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
                   xs.Serialize(writer, obj);
               }
           }
           catch (Exception ex)
           {
               Console.WriteLine(ex.Message);
           }
       }

/// <summary>
       /// XML读取
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void button6_Click(object sender, EventArgs e)
       {
           OpenFileDialog openDlg = new OpenFileDialog();
           openDlg.Title = "File";
           openDlg.Filter = "File (*.txt)|*.txt";

if (openDlg.ShowDialog() == DialogResult.OK)
           {
               string str = DeserializeFromXml<string>(openDlg.FileName);
               richTextBox3.Text = str;
           }
       }

/// <summary>    
       /// 从某一XML文件反序列化到某一类型  
       /// </summary>  
       /// <param name="filePath">待反序列化的XML文件名称</param>
       /// <param name="type">反序列化出的</param>
       /// <returns></returns>  
       public static T DeserializeFromXml<T>(string filePath)
       {
           try
           {
               if (!System.IO.File.Exists(filePath))
                   throw new ArgumentNullException(filePath + " not Exists");
               using (System.IO.StreamReader reader = new System.IO.StreamReader(filePath))
               {
                   System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
                   T ret = (T)xs.Deserialize(reader);
                   return ret;
               }
           }
           catch (Exception ex)
           {
               Console.WriteLine(ex.Message);
               return default(T);
           }
       }

最终效果:

C#读取写入文件的3种方式示例代码

来源:https://l.guanchao.site/index/article/articledetail.html?artid=pFzZPYPaD

标签:c#,读取,写入
0
投稿

猜你喜欢

  • Java集合类的组织结构和继承、实现关系详解

    2023-03-09 10:48:50
  • C#微信公众号开发之服务器配置

    2023-03-12 15:02:50
  • C#中WebBrowser.DocumentCompleted事件多次调用问题解决方法

    2023-12-05 18:23:15
  • Android Wear计时器开发

    2023-04-10 01:22:21
  • C#基于TimeSpan实现倒计时效果的方法

    2021-10-19 00:06:04
  • 关于springboot集成swagger及knife4j的增强问题

    2023-11-29 00:43:50
  • C语言实现双向链表

    2023-05-30 08:02:24
  • Android自定义漂亮的圆形进度条

    2023-08-04 04:23:06
  • C++中左值和右值的区别详解

    2021-09-11 00:07:42
  • Android 按指定大小读取图片的实例

    2022-06-16 18:26:25
  • C#递归应用之实现JS文件的自动引用

    2023-12-09 00:03:52
  • Flutter Widget 之package mason实现详解

    2021-07-08 23:43:08
  • FrameLayout和Fragment处理Android应用UI布局实例

    2021-07-05 15:27:09
  • Springboot过滤器禁止ip频繁访问功能实现

    2022-08-29 11:20:59
  • java各种类型对象占用内存情况分析

    2023-08-22 10:32:05
  • Java super关键字的使用详解

    2021-11-30 13:40:43
  • IDEA配置使用Maven Helper插件的方法(详细配置)

    2022-07-17 03:09:21
  • Android中EditText光标的显示与隐藏方法

    2022-03-01 17:52:35
  • Android开发:微信授权登录与微信分享完全解析

    2023-03-20 14:08:10
  • Android App中使用ViewPager+Fragment实现滑动切换效果

    2023-01-12 19:51:50
  • asp之家 软件编程 m.aspxhome.com