C#(四十六)之基于流的文件操作(FileStream)

news2025/1/11 14:28:44

FileStream类属性和方法

属性

CanRead 指示当前文件流是否支持读取

CanWrite 指示当前文件流是否支持写入

CanSeek 指示当前文件流是否支持查找

IsAsync FileStream是同步打开还是异步打开

Length 流的长度(字节数)

CanTimeOut 当前文件流是否可以超时

ReadTimeOut 最大读取时间,超过则超时
WriteTimeOut 最大写入时间,超过则超时

方法

Read() 从文件中读取字节块

ReadByte() 从文件中读取一个字节

Write() 将字节块写入文件

WriteByte() 将一个字节写入文件

Seek() 设置当前流的位置

Close() 关闭当前流并释放与之关联的资源

Dispose(): 释放由 Stream 使用的所有资源

FileStream同样使用命名空间System.IO

将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源。

FileStream类相关的枚举

FileMode:Append、Create、CreateNew、Open、OpenOrCreate、Truncate(切除)

FileAccess:Read、ReadWrite、Write

FileShare:Inheritable(使文件的句柄可由子进程进行继承)、None、Read、ReadWrite、Write

写入文件:

public static string filePath = @"F:codeFileStreams.txt";
        public FileStream ff = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
        public string sss = "";
        /// <summary>
        /// 创建文件并写入
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            string filePath = @"F:codeFileStreams.txt";
            FileStream ff = new FileStream(filePath,FileMode.OpenOrCreate,FileAccess.ReadWrite);
            string content = @richTextBox1.Text;
            // 将字符串读入字节数组中。
            byte[] buffer = Encoding.Default.GetBytes(content);
            // 将数组写入文件
            ff.Write(buffer, 0, buffer.Length);
            ff.Close();
            MessageBox.Show("写入成功");
        }

文件读取:

/// <summary>
        /// 读取文件
        /// </summary>
        private void button2_Click(object sender, EventArgs e)
        {
            if (sss == "")
            {
                byte[] buffer = new byte[1024 * 1024 * 2];    //定义一个2M的字节数组
                //返回本次实际读取到的有效字节数
                int r = ff.Read(buffer, 0, buffer.Length);    //每次读取2M放到字节数组里面
                //将字节数组中每一个元素按照指定的编码格式解码成字符串
                sss = Encoding.Default.GetString(buffer, 0, r);
                label1.Text = sss;
                // 关闭文件流
                ff.Close();
                // 关闭资源
                ff.Dispose();
 
            }
            else
            {
                MessageBox.Show("请不要重复点击");
            }
           
        }

复制文件:

/// <summary>
        /// 使用FileStream复制文件
        /// </summary>
        private void button3_Click(object sender, EventArgs e)
        {
            string oldPath = @"F:视频教程曾瑛C#视频教程合集(111课程)zy1.flv";
            string newPath = @"D:qqqqqqq.flv";
            CopyFile(oldPath, newPath);
            MessageBox.Show("复制成功");
        }
        /// <summary>
        /// 自定义文件复制函数
        /// </summary>
        public static void CopyFile(string source,string target)    
        {
            //创建负责读取的流
            using (FileStream fsread = new FileStream(source, FileMode.Open, FileAccess.Read))
            {
                //创建一个负责写入的流
                using (FileStream fswrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
                {
                    byte[] buffer=new byte[1024*1024*5];    //声明一个5M大小的字节数组
                    //因为文件不止5M,要循环读取
                    while(true)
                    {
                        int r=fsread.Read(buffer, 0, buffer.Length);    //返回本次实际读取到的字节数
                        //如果返回一个0时,也就意味着什么都没有读到,读取完了
                        if(r==0)
                            break;
                        fswrite.Write(buffer,0,r);
                    }
                    
               }
            }
        }
 

测试使用全部代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
 
namespace FileStreams
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        public static string filePath = @"F:codeFileStreams.txt";
        public FileStream ff = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
        public string sss = "";
 
        /// <summary>
        /// 创建文件并写入
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            string filePath = @"F:codeFileStreams.txt";
            FileStream ff = new FileStream(filePath,FileMode.OpenOrCreate,FileAccess.ReadWrite);
            string content = @richTextBox1.Text;
            // 将字符串读入字节数组中。
            byte[] buffer = Encoding.Default.GetBytes(content);
            // 将数组写入文件
            ff.Write(buffer, 0, buffer.Length);
            ff.Close();
            MessageBox.Show("写入成功");
        }
        /// <summary>
        /// 读取文件
        /// </summary>
        private void button2_Click(object sender, EventArgs e)
        {
            if (sss == "")
            {
                byte[] buffer = new byte[1024 * 1024 * 2];    //定义一个2M的字节数组
                //返回本次实际读取到的有效字节数
                int r = ff.Read(buffer, 0, buffer.Length);    //每次读取2M放到字节数组里面
                //将字节数组中每一个元素按照指定的编码格式解码成字符串
                sss = Encoding.Default.GetString(buffer, 0, r);
                label1.Text = sss;
                // 关闭文件流
                ff.Close();
                // 关闭资源
                ff.Dispose();
 
            }
            else
            {
                MessageBox.Show("请不要重复点击");
            }
           
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
        /// <summary>
        /// 使用FileStream复制文件
        /// </summary>
        private void button3_Click(object sender, EventArgs e)
        {
            string oldPath = @"F:视频教程曾瑛C#视频教程合集(111课程)zy1.flv";
            string newPath = @"D:qqqqqqq.flv";
            CopyFile(oldPath, newPath);
            MessageBox.Show("复制成功");
        }
        /// <summary>
        /// 自定义文件复制函数
        /// </summary>
        public static void CopyFile(string source,string target)    
        {
            //创建负责读取的流
            using (FileStream fsread = new FileStream(source, FileMode.Open, FileAccess.Read))
            {
                //创建一个负责写入的流
                using (FileStream fswrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
                {
                    byte[] buffer=new byte[1024*1024*5];    //声明一个5M大小的字节数组
                    //因为文件不止5M,要循环读取
                    while(true)
                    {
                        int r=fsread.Read(buffer, 0, buffer.Length);    //返回本次实际读取到的字节数
                        //如果返回一个0时,也就意味着什么都没有读到,读取完了
                        if(r==0)
                            break;
                        fswrite.Write(buffer,0,r);
                    }
                    
               }
            }
        }
    }
}
 

 

Form1.designer.cs

namespace FileStreams
{
    partial class Form1
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #region Windows 窗体设计器生成的代码
        /// <summary>
        /// 设计器支持所需的方法 - 不要
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.richTextBox1 = new System.Windows.Forms.RichTextBox();
            this.button2 = new System.Windows.Forms.Button();
            this.label1 = new System.Windows.Forms.Label();
            this.button3 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(12, 102);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(122, 35);
            this.button1.TabIndex = 0;
            this.button1.Text = "创建文件并写入";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            //
            // richTextBox1
            //
            this.richTextBox1.Location = new System.Drawing.Point(13, 13);
            this.richTextBox1.Name = "richTextBox1";
            this.richTextBox1.Size = new System.Drawing.Size(121, 83);
            this.richTextBox1.TabIndex = 1;
            this.richTextBox1.Text = "";
            //
            // button2
            //
            this.button2.Location = new System.Drawing.Point(13, 159);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(121, 33);
            this.button2.TabIndex = 2;
            this.button2.Text = "读取文件";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Click += new System.EventHandler(this.button2_Click);
            //
            // label1
            //
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(13, 212);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(65, 12);
            this.label1.TabIndex = 3;
            this.label1.Text = "未读取文件";
            //
            // button3
            //
            this.button3.Location = new System.Drawing.Point(12, 257);
            this.button3.Name = "button3";
            this.button3.Size = new System.Drawing.Size(122, 31);
            this.button3.TabIndex = 4;
            this.button3.Text = "文件复制";
            this.button3.UseVisualStyleBackColor = true;
            this.button3.Click += new System.EventHandler(this.button3_Click);
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(779, 453);
            this.Controls.Add(this.button3);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.richTextBox1);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
            this.PerformLayout();
        }
        #endregion
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.RichTextBox richTextBox1;
        private System.Windows.Forms.Button button2;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Button button3;
    }
}

有好的建议,请在下方输入你的评论。

在这里插入图片描述

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

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

相关文章

【C++进阶】哈希表

文章目录 前言哈希概念哈希冲突哈希函数哈希冲突解决一.闭散列解决哈希冲突1. 线性探测2.二次探测 二、闭散列的实现1.准备2.闭散列插入3.闭散列查找4.闭散列删除 三、闭散列完整源码四、开散列解决哈希冲突1.开散列概念2.哈希桶的结构3.哈希桶的插入4.哈希桶的查找5.哈希桶的删…

学习多线程

1、学习线程池 1.1jdk中的线程池 推荐使用ThreadPoolExecutor 1.1.1先了解参数的意义 首先看下ThreadPoolExecutor的构造函数 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueu…

对话e签宝,解读 SaaS圈“头部玩家”的增长故事

可以肯定的是&#xff0c;未来3年&#xff0c;整个中国SaaS市场会逐步确认船票分配。穿越周期&#xff0c;告别不确定的三年&#xff0c;给幸存下来的企业上了淋漓生动的一课。在新的起点上&#xff0c;SaaS也需要一种新的打开方式。谁扎得牢、想得透、做的好、跑得快&#xff…

Docker数据卷和数据卷容器应用

学习目的 掌握Docker数据卷和数据卷容器使用方法。 学习准备 要求实验主机能够连接外网&#xff0c;已经正确安装Docker&#xff0c;并关闭防火墙和selinux。 学习步骤 步骤1&#xff1a;创建数据卷 &#xff08;1&#xff09;创建容器&#xff0c;为容器添加一个数据卷&…

基于树莓派4B与STM32的智能门禁系统项目(代码开源)

前言&#xff1a;本文为手把手教学嵌入式经典项目——智能门禁项目&#xff0c;本次项目采用 树莓派4B 与 STM32F103C8T6 进行联合开发。项目充分发挥各自 CPU 的优势与长处&#xff0c;将人脸识别的大计算量任务给树莓派4B&#xff0c;将门禁系统的控制部分交给 STM32 进行处理…

外包干了2个月,技术退步明显...

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

举个栗子!Quick BI 技巧(1):创建趋势折线图

自 2016 年以来&#xff0c;优阅达《举个栗子》内容专栏已陪伴众多企业用户高效工作&#xff0c;解决真实业务场景中的用数问题。 2023 年&#xff0c;全新系列《举个栗子&#xff01;Quick BI 技巧》出炉啦~ 优阅达期待能够持续分享经验&#xff0c;帮助用户发现更多 Quick …

剑指 Offer. 二叉树中和为某一值的路径

给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&…

ATA3000系列功率放大器——水声信号中的典型应用

ATA3000系列功率放大器——水声信号中的典型应用 水声领域介绍&#xff1a; 主动声纳是通过声纳本身发射声波&#xff0c;根据声信号反射回波来发现目标&#xff0c;并测定目标的位置和运动参数。水声信号发射机在主动声纳设备中是非常重要的组成部分&#xff0c;其产生特定形式…

YoloV5/YoloV7改进---注意力机制:引入瓶颈注意力模块BAM,对标CBAM

目录 1.BAM介绍 2.BAM引入到yolov5 2.1 加入common.py中&#xff1a; 2.2 加入yolo.py中&#xff1a; 2.3 yolov5s_BAM.yaml 1.BAM介绍 论文&#xff1a;https://arxiv.org/pdf/1807.06514.pdf 摘要&#xff1a;提出了一种简单有效的注意力模块&#xff0c;称为瓶颈注意力模块…

【数据仓库】Apache Doris介绍

Apache Doris介绍 Apache Doris应用场景 Apache Doris核心特性 Apache Doris架构 Doris数据模型三种 Aggregate模型介绍 Uniq模型介绍 在某些多维分析场景下,用户更关注的是如何保证Key的唯一性Key 唯一性约束。因此&#xff0c;我们引入了 Unig 的数据模型。该模型本质上是聚…

微信如何创建自己的小程序?

微信如何创建自己的小程序&#xff1f;微信小程序成为了很多商家、企业甚至是个人在互联网中的营销工具&#xff0c;微信小程序基本上可以说是属于必备工具。那么微信如何创建自己的小程序呢&#xff1f;下面一起来给大家说说。 一、注册小程序账号 微信如何创建自己的小程序…

12.JavaWeb-Node.js

1.Node.js的概念 传统的Web服务器中&#xff0c;每个请求都会创建一个线程&#xff0c;这会导致线程数的增加&#xff0c;从而影响服务器的性能和扩展性&#xff0c;Ryan Dahl借助Chrome的V8引擎提供的能力实现了Node.js——可以在服务端运行的JavaScript&#xff08;可以把Nod…

win下实现Linux的tab自动补全

声明 &#xff1a;如果不是确定的话 注册表这个东西不建议更改 如果更改的话建议先备份系统 以防意外 1.找到注册表编辑器 2. 展开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor 3.找到Completion Char 双击 把橙色的数值改成9 4.重新打开cmd 就可以了 参考文章…

【Python数据处理】-Pandas笔记

Python数据处理-Pandas笔记 &#x1f4dd; 基本概念 Pandas是一个强大的Python数据处理库&#xff0c;它提供了高效的数据结构和数据分析工具&#xff0c;使数据处理变得简单而快速。本篇笔记将介绍Pandas中最常用的数据结构——Series和DataFrame&#xff0c;以及数据处理的…

48. Compose自定义绘制日历-2

这次的实现方式完全改了&#xff0c;感觉最初的想法对切换周历模式比较难实现&#xff0c; 现在是把月历和周历 同时生成&#xff0c;动态切换。 待优化的&#xff1a;切换的时候 闪动没那么丝滑。 还有另一种实现方案 &#xff1a; 只生成当前月份 和前后月份三组数据&#x…

HTML5网页设计小案例:逸仙园茶馆招聘启事网页的设计

前言&#xff1a; 今天分享的逸仙园茶馆招聘启事网页的设计是本专栏的第一篇博客&#xff0c;也是我学习了几个小时知识点后写的实战小案例。我有个想法&#xff0c;想以逸仙园茶馆为灵感不断优化改进代码与想法设计一套与茶叶有关的的精美网页 逸仙园茶馆招聘启事网页的设计案…

【动态规划上分复盘】这是你熟悉的地下城游戏吗?

欢迎 前言一、动态规划五步曲二、地下城游戏题目分析思路&#xff1a;动态规划具体代码如下 总结 前言 本文讲解关于动态规划思路的两道题目。 一、动态规划五步曲 1.确定状态表示&#xff08;确定dp数组的含义&#xff09;2.确定状态转移方程&#xff08;确定dp的递推公式&a…

NumPy实现逻辑回归

说明&#xff1a;数据集 ex2data1.txt是吴恩达机器学习的作业的数据集。 # -*-coding:utf-8-*- import matplotlib.pyplot as plt import numpy as np import pandas as pdclass Logitstic_Regression:def __init__(self, learning_rate0.01, num_iterations75000, threshold0.…

# 技术架构演进之路

技术架构演进之路 文章目录 技术架构演进之路单机架构应用数据分离架构应用服务集群架构读写分离架构冷热分离架构垂直分库架构微服务架构容器编排技术互联网架构 单机架构 简介应用和服务公用一台服务器出现原因出现在互联网早期,访问量比较小,单机足以满足需求.架构工作原理…