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

news2024/11/17 19:45:55

目录

一、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.生成效果

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

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1270457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux环境搭建(Ubuntu22.04)+ 配置共享文件夹(Samba)

Linux开发环境准备 搭建Linux开发环境所需要的软件如下: VMware虚拟机:用于运行Linux操作系统的虚拟机软件之一,VMware下载安装在文章中不做说明,可自行百度谢谢Ubuntu光盘镜像:用于源代码编译,有闲置计算…

C#开发的OpenRA游戏之属性SelectionDecorations(14)

C#开发的OpenRA游戏之属性SelectionDecorations(14) 前面分析选择类时,还有一个功能,就是把选中物品的状态和生命值显示出来。 它是通过下面的函数来实现: protected override IEnumerable<IRenderable> RenderSelectionBars(Actor self, WorldRenderer wr, bool …

【探索Linux】—— 强大的命令行工具 P.18(进程信号 —— 信号捕捉 | 信号处理 | sigaction() )

阅读导航 引言一、信号捕捉1. 内核实现信号捕捉过程2. sigaction() 函数&#xff08;1&#xff09;函数原型&#xff08;2&#xff09;参数说明&#xff08;3&#xff09;返回值&#xff08;4&#xff09;函数使用 二、可重入函数与不可重入函数1. 可重入函数条件2. 不可重入函…

突破界限:R200科研无人车,开辟研究新天地

提到科研无人车&#xff0c;大家可能首先想到的是其在自动驾驶和其他先进技术领域的应用。然而&#xff0c;随着科技的不断进步&#xff0c;科研无人车已经在智慧城市建设、商业服务、地质勘探、环境保护、农业技术革新、灾害应急和自动化服务等多个领域发挥着至关重要的作用。…

钢贸行业ERP系统:实现全面管理与持续增长的利器

去年在上海举办的数字化钢贸高峰论坛中提出钢贸业亟需数字化转型&#xff0c;因为在大力发展数字经济的时代背景下&#xff0c;行业进行数字化转型已经成为一种必然趋势。在今年以前&#xff0c;一些钢贸商一直沿用着以前非常粗放的管理手段&#xff0c;比如手写账本。而如果使…

揭秘近期CSGO市场小幅回暖的真正原因

揭秘近期CSGO市场小幅回暖的真正原因 最近市场小幅度回暖&#xff0c;第一个原因则是到处都在说buff要开租赁了&#xff0c;市场要开始爆燃了。童话听到这些消息实在是绷不住了&#xff0c;出来给大家讲一下自己的看法&#xff0c;大家理性思考一下。 Buff出不出租赁跟市场燃不…

【开源视频联动物联网平台】开箱即用的物联网项目介绍

写一个开箱即用的物联网项目捐献给Dromara组织 一、平台简介 MzMedia开源视频联动物联网平台&#xff0c;简单易用&#xff0c;更适合中小企业和个人学习使用。适用于智能家居、农业监测、水利监测、工业控制&#xff0c;车联网&#xff0c;监控直播&#xff0c;慢直播等场景。…

二.运算符

运算符 1.算术运算符2.比较运算符3.逻辑运算符 1.算术运算符 算数运算符主要用于数学运算&#xff0c;其可以连接运算符前后的两个数值或表达式&#xff0c;对数值或表达式进行 - * / 和 取模%运算 1.加减法运算符 mysql> SELECT 100,100 0,100 - 0,100 50,100 50 - …

良心推荐免费白嫖的电子书制作与发布平台,快来试试噢~

电子书的出现极大的改变了人们的阅读习惯&#xff0c;与传统的纸质文献相比呢&#xff0c;电子书具有存储量大、体积小、成本低、信息更新快、方便阅读等不可替代的优势&#xff0c;受到了越来越多人的喜爱。 那怎么去制作一个高级又炫酷的电子书呢&#xff1f;今天小编就专门…

java源码-数组

背景 上传图片&#xff0c;需要对图片格式进行校验&#xff0c;这是就可以使用数组 1、什么是数组&#xff1f; Java 语言中提供的数组是用来存储固定大小的同类型元素。 如&#xff1a;可以声明一个数组变量&#xff0c;如 numbers[100] 来代替直接声明 100 个独立变量 numb…

Minio开源高性能高可靠存储搭建

一、minio的特征 1、高性能 MinIO 是一种高性能、S3 兼容的对象存储。它专为大规模 AI/ML、数据湖和数据库工作负载而构建&#xff0c;并且它是由软件定义的存储。不需要购买任何专有硬件&#xff0c;就可以在云上和普通硬件上拥有分布式对象存储。MinIO拥有开源 GNU AGPL v3…

C陷阱与缺陷——第3章 语义陷阱

1. 指针和数组 C语言中只有一维数组&#xff0c;而且数组的大小必须在编译器就作为一个常数确定下来&#xff0c;然而在C语言中数组的元素可以是任何类型的对象&#xff0c;当然也可以是另外的一个数组&#xff0c;这样&#xff0c;要仿真出一个多维数组就不是难事。 对于一个…

OpenCvSharp从入门到实践-(06)创建图像

目录 1、创建图像 1.1实例1-创建黑色图像 1.2实例2-创建白色图像 1.3实例3-创建随机像素的雪花点图像 2、图像拼接 2.1水平拼接图像 2.2垂直拼接图像 2.3实例4-垂直和水平两种方式拼接两张图像 在OpenCV中&#xff0c;黑白图像其实就是一个二维数组&#xff0c;彩色图像…

vscode插件问题

1 Vscode code颜色变化 最外层标签颜色变成白色 其他标签有颜色&#xff0c;css代码颜色有些变成白色 是安装的另一个插件vue影响的&#xff0c;卸载就能恢复正常的颜色 2 配置Vue项目的代码片段 css 样式代码片段 配置css.json上后偶尔能用偶尔不能用&#xff0c;Vscode 右下…

Flutter应用程序的加固原理

在移动应用开发中&#xff0c;Flutter已经成为一种非常流行的技术选项&#xff0c;可以同时在Android和iOS平台上构建高性能、高质量的移动应用程序。但是&#xff0c;由于其跨平台特性&#xff0c;Flutter应用程序也面临着一些安全风险&#xff0c;例如反编译、代码泄露、数据…

Egg.js的方法扩展

Extend-application 方法扩展 eggjs的方法的扩展和编写 Egg.js可以对内部的五种对象进行扩展&#xff0c;以下是可扩展的对象、说明、this指向和使用方式。 application对象方法拓展 按照Egg的约定&#xff0c;扩展的文件夹和文件的名字必须是固定的。比如要对application扩…

【ZEDSLAM】Ubuntu18.04系统ZED 2i双目相机SDK安装、联合标定、SLAM测试

0.设备、环境和说明 笔记本电脑i5-8300H、GTX 1060、32GRAM 因为后面要测试Vins-Fusion和ORB-SLAM3&#xff0c;所以推荐安装Ubuntu 18.04&#xff08;或者Ubuntu 20.04&#xff09; ROS 1&#xff08;不建议用比Ubuntu18更低的版本&#xff09; ROS一键安装命令&#xff1a;…

Android textView 显示: STRING_TOO_LARGE

默认情况下&#xff0c;TextView只能显示大约32K的字符。如果你的字符串超过这个限制&#xff0c;你将收到一个错误&#xff1a;“String too large”。 <string content" ...."/>问题点是&#xff1a;getResource().getString(R.string.content) 得到的是&am…

linux下实现Qt程序实现开机自启动

1.原理 要想实现开机自启动&#xff0c;首先&#xff0c;QT是没有这种实现的&#xff0c;最好是靠电脑开机的启动目录启动软件&#xff0c;下面这个目录 /etc/xdg/autostart 这是操作系统中用于配置启动项的目录&#xff0c;该目录下存放着开机自启动的启动器(.desktop)文件…

如何练好太极拳?

太极拳是一种需要细心和耐心的武术&#xff0c;要练好太极拳&#xff0c;需要从以下几个方面入手&#xff1a; 找到好的师傅&#xff1a;找到一位经验丰富、技艺高超的师傅是学习太极拳的关键。师傅应该具备正确的太极拳理论、技术和经验&#xff0c;能够正确地指导学生学习太极…