C#文件流二进制文件的读写

目录

一、BinaryWriter类

二、BinaryReader类

三、示例

1.源码

2.生成效果


        二进制文件的写入与读取主要是通过BinaryWriter类和BinaryReader类来实现的。

一、BinaryWriter类

        BinaryWriter类以二进制形式将基元类型写入流,并支持用特定的编码写入字符串,其常用方法及说明:

方   法

说    明

Close

关闭当前的BinaryWriter类和基础流

Seek

设置当前流中的位置

Write

将值写入当前流

二、BinaryReader类

        BinaryReader用特定的编码将基元数据类型读作二进制值,其常用方法及说明:

方    法 说   明
Close 关闭当前阅读器及基础流
PeekChar 返回下一个可用的字符,并且不提升字节或字符的位置
Read 从基础流中读取字符,并提升流的当前位置
ReadBoolean 从当前流中读取Boolean值,并使该流的当前位置提升一个字节
ReadByte 从当前流中读取下一个字节,并使流的当前位置提升一个字节
ReadBytes 从当前流中将count个字节读入字节数组,并使当前位置提升count个字节
ReadChar 从当前流中读取下一个字符,并根据所使用的Encoding和从流中读取的特定字符,提升流的当前位置
ReadChars 从当前流中读取count个字符,以字符数组的形式返回数据,并根据所使用的Encoding和从流中读取
的特定字符,提升当前位置
ReadInt32 从当前流中读取4个字节有符号整数,并使流的当前位置提升4个字节
ReadString 从当前流中读取一个字符串。字符串有长度前缀, 一次将7位编码为整数

三、示例

1.源码

//文件流的二进制读写
//Windows窗体应用.NET8.0,不用设计器
namespace _08
{
    public partial class Form1 : Form
    {
        private Button? button1;
        private Button? button2;
        private TextBox? textBox1;
        private OpenFileDialog? openFileDialog1;
        private SaveFileDialog? saveFileDialog1;
        private Label? label1;

        public Form1()
        {
            InitializeComponent();
            Load += Form1_Load;
        }

        private void Button1_Click(object? sender, EventArgs e)
        {
            if (textBox1!.Text == string.Empty)
            {
                MessageBox.Show("要写入的文件内容不能为空");
            }
            else
            {               
                saveFileDialog1!.Filter = "二进制文件(*.dat)|*.dat";   //设置保存文件的格式
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    //使用“另存为”对话框中输入的文件名实例化FileStream对象
                    using (FileStream? myStream = new(saveFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                    {                      
                        new BinaryWriter(myStream).Write(textBox1.Text); //内联临时变量二进制写入流对象                    
                        new BinaryWriter(myStream).Close();              //关闭当前二进制写入流                       
                        myStream.Close();                                                 //关闭当前文件流
                    }
                    textBox1.Text = string.Empty;
                }
            }
        }

        private void Button2_Click(object? sender, EventArgs e)
        {          
            openFileDialog1!.Filter = "二进制文件(*.dat)|*.dat";         //设置打开文件的格式
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1!.Text = string.Empty;
                //使用“打开”对话框中选择的文件名实例化FileStream对象
                using FileStream? myStream = new(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);
                if (new BinaryReader(myStream).PeekChar() != -1)   //内联临时变量二进制写入流
                {                   
                    textBox1.Text = Convert.ToString(
                        new BinaryReader(myStream).ReadString());  //以二进制方式读取文件
                }               
                new BinaryReader(myStream).Close();                //关闭当前二进制读取流               
                myStream.Close();                                  //关闭当前文件流
            }
        }

        private void Form1_Load(object? sender, EventArgs e)
        {
            // textBox1
            textBox1 = new TextBox
            {
                Location = new Point(12, 29),
                Multiline = true,
                Name = "textBox1",
                Size = new Size(270, 111)
            };
            // label1
            label1 = new Label
            {
                AutoSize = true,
                Location = new Point(12, 9),
                Text = "文件内容:"
            };
            // button1
            button1 = new Button
            {
                Location = new Point(66, 146),
                Name = "button1",
                Size = new Size(75, 23),
                Text = "写入",
                UseVisualStyleBackColor = true
            };
            button1.Click += Button1_Click;
            // button2
            button2 = new Button
            {
                Location = new Point(147, 146),
                Name = "button2",
                Size = new Size(75, 23),
                Text = "读取",
                UseVisualStyleBackColor = true
            };
            button2.Click += Button2_Click;
            // openFileDialog1
            openFileDialog1 = new OpenFileDialog
            {
                FileName = "openFileDialog1"
            };
            //saveFileDialog1
            saveFileDialog1 = new SaveFileDialog();
            //Form1
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(295, 180);
            StartPosition = FormStartPosition.CenterScreen;
            Controls.Add(label1);
            Controls.Add(textBox1);
            Controls.Add(button2);
            Controls.Add(button1);
        }    
    }
}

2.生成效果

         操作过程:因为我先前在当前目录下已经存过一个二进制文件了,所以:生成→ 读取→ 浏览到当前目录,并选择目录下的二进制文件,打开显示在文本框里。→ 编辑打开的文件,存储,可以另存为,也可以覆盖原文件。→ 再打开文件。

 

 

相关推荐

  1. C++二进制文件

    2023-12-06 21:20:05       30 阅读
  2. C++二进制文件

    2023-12-06 21:20:05       32 阅读
  3. c++文件

    2023-12-06 21:20:05       58 阅读
  4. C++文件

    2023-12-06 21:20:05       69 阅读
  5. [C#]文件-1

    2023-12-06 21:20:05       56 阅读
  6. C语言】通过fgets和fscanf了解文件概念

    2023-12-06 21:20:05       22 阅读
  7. C++BMP文件

    2023-12-06 21:20:05       36 阅读
  8. C语言】文件

    2023-12-06 21:20:05       52 阅读
  9. C# —— File文件

    2023-12-06 21:20:05       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 21:20:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 21:20:05       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 21:20:05       82 阅读
  4. Python语言-面向对象

    2023-12-06 21:20:05       91 阅读

热门阅读

  1. C# 图片下载工具类

    2023-12-06 21:20:05       47 阅读
  2. 二分查找17(Leetcode1539第k个缺失的正整数)-2

    2023-12-06 21:20:05       54 阅读
  3. C#中 怎么检测Tcp网线断开?

    2023-12-06 21:20:05       50 阅读
  4. Qt 6.6.1 修复了 400 多个 bug

    2023-12-06 21:20:05       53 阅读
  5. 练习题——-【学习补档】日期差值

    2023-12-06 21:20:05       56 阅读
  6. 【BroadcastReceiver】

    2023-12-06 21:20:05       51 阅读