通过实例学C#之FileStream类

简介

        可以通过此类进行文件读取。

        首先在项目所在文件夹的Bin文件中新建一个test.txt文件,里面输入内容“hello world!”。


构造函数

FileStream (string path, FileMode mode,FileAccess access)

        通过路径文件path,打开文件模式mode以及读写模式access来创建一个fileStream实例对象。


其中,mode模式有以下几种:

1.Append:如果文件存在,那么打开文件,并定位到文件结尾;如果文件不存在,那么新建一个文件。

2.Create:如果文件不存在,则新建文件;如果文件已经存在,那么把原文件覆盖。

3.CreateNew:创建新的文件。

4.Open:打开现有文件

5.OpenOrCreate:如果文件已存在,那么打开文件;否则,创建新文件。


读写模式access有以下几种:

1.Read:可以从文件中读取数据。

2.ReadWrite:可以从文件中读取数据和往文件中写入数据。

3.Write:可以往文件中写入数据。


常用属性

CanRead

        判断filestream是否可读,如果是,返回true,否则,返回false。

static void Main(string[] args)
{
    string path = "test.txt";
    FileStream fs = new FileStream(path, FileMode.OpenOrCreate,FileAccess.Read);
    Console.WriteLine("实例fs是否可读:"+fs.CanRead);
    fs.Close();

    FileStream fs1 = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
    Console.WriteLine("实例fs1是否可读:" + fs1.CanRead);
    fs.Close();

    Console.ReadKey();
}

运行结果:
实例fs是否可读:True
实例fs1是否可读:False

CanWrite

        判断filestream实例是否可写,如果是,返回true,否则,返回false。

static void Main(string[] args)
{
    string path = "test.txt";
    FileStream fs = new FileStream(path, FileMode.OpenOrCreate,FileAccess.Read);
    Console.WriteLine("实例fs是否可写:"+fs.CanWrite);
    fs.Close();

    FileStream fs1 = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
    Console.WriteLine("实例fs1是否可写:" + fs1.CanWrite);
    fs.Close();

    Console.ReadKey();
}

运行结果:
实例fs是否可写:False
实例fs1是否可写:True

Length

        获取filestream实例的长度。

 static void Main(string[] args)
 {
     string path = "test.txt";
     FileStream fs = new FileStream(path, FileMode.OpenOrCreate,FileAccess.Read);
     Console.WriteLine("fs读取文档内容长度为:"+fs.Length);
     fs.Close();

     Console.ReadKey();
 }

运行结果:
fs读取文档内容长度为:12

Name

        获取filestream对象操作文件的绝对路径。

static void Main(string[] args)
{
    string path = "test.txt";
    FileStream fs = new FileStream(path, FileMode.OpenOrCreate,FileAccess.Read);
    Console.WriteLine("fs读取文件的绝对路径:");
    Console.WriteLine(fs.Name);
    fs.Close();

    Console.ReadKey();
}

运行结果:
fs读取文件的绝对路径:
D:\文档\c#\控制台\fileStream\ConsoleApp1\ConsoleApp1\bin\Debug\test.txt

Position

        filestream实例当前所在的位置。


常用方法

Close()

        打开filestream使用以后记得要用Close()方法把流关闭,不然文件被占用,其他程序就无法打开了。


Flush()

        清除此流的缓冲区,使得所有缓冲数据都写入到文件中。


Read (byte[] buffer, int offset, int count)

        将filestream实例从0到count长度的内容读取到byte数组中。

static void Main(string[] args)
{
    string path = "test.txt";
    FileStream fs = new FileStream(path, FileMode.OpenOrCreate,FileAccess.Read);

    byte[] ay = new byte[fs.Length];
    fs.Read(ay, 0, (int)fs.Length);

    foreach (byte b in ay)
    {
        Console.WriteLine(b);
    }

    fs.Close();

    Console.ReadKey();
}

运行结果:
104    //h的Ascii码
101    //e的Ascii码
108    //l的Ascii码       
108    //l的Ascii码
111    ...
32
119
111
114
108
100
33

ReadByte()

        从文件中读取一个字节,并将读取位置提升一个字节。

static void Main(string[] args)
{
    string path = "test.txt";
    FileStream fs = new FileStream(path, FileMode.OpenOrCreate,FileAccess.Read);

    Console.WriteLine("fs.positon="+fs.Position);
    Console.WriteLine("读取第一个字符"+fs.ReadByte());
    Console.WriteLine("fs.positon=" + fs.Position);
    Console.WriteLine("读取第二个字符" + fs.ReadByte());
    Console.WriteLine("fs.positon=" + fs.Position);
    Console.WriteLine("读取第三个字符" + fs.ReadByte());
    Console.WriteLine("fs.positon=" + fs.Position);

    fs.Close();

    Console.ReadKey();
}

运行结果:
fs.positon=0
读取第一个字符104
fs.positon=1
读取第二个字符101
fs.positon=2
读取第三个字符108
fs.positon=3

Seek (long offset, SeekOrigin origin)

        将该流的当前位置设置为给定值。使用该功能,当读取或写入时,可以控制读取和写入的位置。

static void Main(string[] args)
{
    string path = "test.txt";
    FileStream fs = new FileStream(path, FileMode.OpenOrCreate,FileAccess.Read);

    fs.Seek(6,SeekOrigin.Begin);    //文本内容为hello world,w所在index为6,所以把seek定为从开头数起第6位
    byte[] buffer = new byte[5];    //创建一个大小为5的字节数组,用来读取“world”字符
    fs.Read(buffer, 0, 5);      //注意,中间的offset,是从seek定位位置开始数,而不是从文本最开头开始数
    foreach (byte b in buffer)
    {
        Console.WriteLine(b);
    }

    fs.Close();

    Console.ReadKey();
}

运行结果:
119
111
114
108
100
//以上对应world每一位的Ascii码

Write (byte[] buffer, int offset, int count)

        将buffer数组中从offset开始的count个字节写入到filestream中。

static void Main(string[] args)
{
    string path = "test.txt";
    FileStream fs = new FileStream(path, FileMode.Append,FileAccess.Write);

    byte[] write = new byte[] { 115, 117,110 };   //在原来文件末尾增加单词sun,查出sun每个字母对应的ascii码,将其放在一个byte数组中

    fs.Write(write, 0, write.Length);
    fs.Close();

    Console.ReadKey();
}

运行结果:

打开test.txt文件,发现对应的字符已经追加到原有字符后面了。


WriteByte (byte value)

        一个字节写入文件流中的当前位置。

static void Main(string[] args)
{
    string path = "test.txt";
    FileStream fs = new FileStream(path, FileMode.Append,FileAccess.Write);

    byte[] write = new byte[] { 115, 117,110 };   //在原来文件末尾增加单词sun,查出sun每个字母对应的ascii码,将其放在一个byte数组中

    fs.WriteByte(write[0]);
    fs.WriteByte(write[1]);
    fs.WriteByte(write[2]);

    fs.Close();

    Console.ReadKey();
}

运行结果:在文本文件内容后面追加"sun"三个字符。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Arcgis Pro2.5安装教程(内含安装文件)

​最近处理的数据量大,发现arcmap这种老产品属实是不行了,相比于下一代的Arcgis Pro,不但运行速度慢,也容易遇到突然关闭的问题,之前基于团队的选择也没办法,最近实在是被数据搞得无语了,一鼓作气装上了Arc…

Java序列流和打印流、对象序列化

目录 1、序列流 1.1 SequenceInputStream 1.2 案例:切割mp3并合并 2、 对象的序列化 2.1 ObjectOutputStream与ObjectInputStream 2.2 Serializable 3、Properties. 4、打印流 4.1 PrintStream 5、操作基本数据类型的流对象 5.1 DataInputStream以及DataOutputStrea…

书生·浦语大模型全链路开源体系-第6课

书生浦语大模型全链路开源体系-第6课 书生浦语大模型全链路开源体系-第6课相关资源Lagent & AgentLego 智能体应用搭建环境准备创建虚拟环境安装LMDeploy安装 Lagent安装 AgentLego Lagent 轻量级智能体框架使用 LMDeploy 部署启动并使用 Lagent Web Demo使用自定义工具获取…

呼叫系统的技术实现原理和运作流程,ai智能系统,呼叫中心外呼软交换部署

呼叫系统的技术实现原理和运作流程可以涉及多个组成部分,包括硬件设备、软件系统和通信协议。以下是一般情况下呼叫系统的技术实现原理和运作流程的概述: 硬件设备: 服务器:用于承载呼叫系统的核心软件和数据库。电话交换机&#…

学习-官方文档编辑方法

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Linux常用命令英文全称与中文解释

Linux操作系统中有许多常用的命令,每个命令都有其英文全称(Full Name)和中文解释。以下是一些常见的Linux命令及其英文全称和中文解释的列表: 你猜猜这个是哪个软件的快捷键↑ man: Manual 意思是手册,可以用这个命…

如何让指定 Windows 程序崩溃

一、为何要把人家搞崩溃呢 看到这个标题,大家可能觉得奇怪,为什么要让指定程序崩溃呢,难道是想作恶吗?😓 哈哈,绝对不是,真实原因是这样的。如果大家用过 Windows 电脑,可能见过类…

【个人博客搭建】(3)添加SqlSugar ORM 以及Json配置文件读取

1、安装sqlsugar。在models下的依赖项那右击选择管理Nuget程序包,输入sqlsugarcore(因为我们用的是netcore,而不是net famework所以也对应sqlsugarcore),出来的第一个就是了,然后点击选择版本,一…

展会媒体邀约资源,媒体宣传服务执行

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 在组织展会时,媒体宣传服务的执行是提升展会知名度和影响力的关键环节。 确定目标媒体:根据展会的主题和目标受众,选择适合的媒体进行邀请。这可能包…

微软 SDL 安全研发生命周期详解

微软SDL(Security Development Lifecycle)是一种安全软件开发的方法论,它强调在整个产品开发过程中融入安全考虑因素。SDL 是一个动态的过程,包括多个阶段和活动,以确保产品的安全开发、测试、部署和运行。Microsoft 要…

2023天梯赛 L3_2 完美树 【树形DP、01最大/小价值】

完美树 思路 观察发现:如果一颗子树 u u u,它刚好有偶数个节点,那么 0 0 0 和 1 1 1 的染色数量一定相等,如果有奇数个节点,那么 0 0 0 和 1 1 1 的数量一定恰好相差 1 1 1(可能是 0 0 0 多&#x…

OpenHarmony多媒体-mp4parser

简介 一个读取、写入操作音视频文件编辑的工具。 编译运行 1、通过IDE工具下载依赖SDK,Tools->SDK Manager->Openharmony SDK 把native选项勾上下载,API版本>10 2、开发板选择RK3568,ROM下载地址. 选择开发板类型是rk3568&#xf…

高可用集群——keepalived

目录 1 高可用的概念 2 心跳监测与漂移 IP 地址 3 Keepalived服务介绍 4 Keepalived故障切换转移原理介绍 5 Keepalived 实现 Nginx 的高可用集群 5.1 项目背景 5.2 项目环境 5.3 项目部署 5.3.1 web01\web02配置: 5.3.2nginx负载均衡配置 5.3.3 主调度服…

碳实践|手把手教你开展组织碳核算

一、背景介绍 政府间气候变化委员会 IPCC(Intergovernmental Panel on Climate Chang)是世界气象组织(WMO)及联合国环境规划署(UNEP)于1988年联合建立的政府间机构。 IPCC在1997年和2000年分别发布了《1996 年 IPCC 国家温室气体清单指南修订本》和《国家温室气体清单优良作法…

【氮化镓】栅极漏电对阈值电压和亚阈值摆幅影响建模

本文是一篇关于p-GaN门AlGaN/GaN高电子迁移率晶体管(HEMTs)的研究文章,发表于《应用物理杂志》(J. Appl. Phys.)2024年4月8日的期刊上。文章的标题为“Analysis and modeling of the influence of gate leakage curren…

什么是SRE?

什么是SRE? SRE,全称为Site Reliability Engineering,即网站可靠性工程,是一种职能角色,它融合了软件工程和系统管理的技能与实践,旨在通过软件和自动化的方式来提高系统的可靠性、稳定性和扩展性。以下是…

Zabbix自定义模板、邮件报警、自动发现与注册、proxy代理、SNMP监控

目录 自定义监控内容 1.明确需要执行的 linux 命令 2.创建 zabbix 的监控项配置文件,用于自定义 key 3.在服务端验证新建的监控项 在 Web 页面创建自定义监控项模板 1.创建模板 2.创建应用集(用于管理监控项的) 3.创建监控项 4.创建…

JEECG表格选中状态怎么去掉

官网代码(在取消选中状态的时候不生效) rowSelection() {return {onChange: (selectedRowKeys, selectedRows) > {console.log(selectedRowKeys: ${selectedRowKeys}, selectedRows: , selectedRows);},getCheckboxProps: record > ({props: {disa…

【基础】gcc-动态库和静态库的创建和使用-命令

目录 1 动态库的建立使用2 动态库封装过程2.1 编译动态库2.2 使用动态库2.3 命令参数说明 3 静态库封装过程3.1 静态库的封装3.2 静态库的使用 1 动态库的建立使用 首先建立一个头文件,和三个.cpp文件,目的是要把这些文件链接成动态库: 其中…

C#创建背景色渐变窗体的方法:创建特殊窗体

目录 1.让背景渐变色的理论基础 2.让背景渐变色的方法 3.一个实施例 (1)Form1.Designer.cs (2)Form1.cs (3)渐变的蓝色背景 在窗体设计时,可以通过设置窗体的BackColor属性来改变窗口的背…