通过实例学C#之FileStream类

news2024/10/7 20:29:03

简介

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

        首先在项目所在文件夹的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"三个字符。

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

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

相关文章

智能内容分析:Kompas.ai如何揭示内容表现的秘密

在数字营销的世界里,内容分析是衡量内容表现、优化策略并实现营销目标的关键。通过深入分析内容的各项指标,品牌能够更准确地理解其内容的市场表现,从而做出更加明智的营销决策。本文将深入探讨内容分析的重要性,详细介绍Kompas.a…

医疗信创发展走势

2023年:医疗信创的“元年” ----------------------医疗信创的主要任务------------------------ (一) 电脑终端方面 行政办公类电脑终端需支持信创改造,实现“应替尽替真替真用”的目标。 (二) 系统改造方面 1.与诊疗业务无关的信息系统 行政办公…

Navicat导入数据与导出数据

1. 导出数据 * 1. 在表格管理中找打导出向导.* 2. 选择导出格式.* 3. 勾选需要导出的表格(其他设置默认即可).* 4. 选择每张表需要导出的字段(默认即可).* 5. 附加选项(默认即可).* 6. 点击开始.* 7. 默认导出导入到桌面.2. 导入数据 * 0. 先删除原先的表格, 好演示效果. * 1…

CentOS显示mac地址错误|虚拟机克隆|CentOS静态ip

文章目录 怎么复制虚拟机?修改虚拟机静态ip遇到的错误解决 怎么复制虚拟机? 方法一: 方法二: 1.以前创建好的虚拟机所在文件夹复制一份,改名字 2.在虚拟机中打开 后缀为.vmx文件 3.启动虚拟机 修改虚拟机静态ip …

51单片机实验04 -数码管的动态显示实验

目录 一、实验目的 二、实验内容 三、实验原理 四、实验方法 五,实验效果及代码 1,效果 2,代码 六,课后习题 1,使用定时器T0的中断函数1 从999999~0计时 1)效果 2)代码 2&#xff0c…

OpenHarmony开发实例:【仿桌面应用】

介绍 本示例实现了一个简单桌面应用,实现了以下几点功能: 1.展示了系统安装的应用,实现点击启动、应用上滑弹出卡片、卡片添加到桌面、卡片移除功能。 2.实现桌面数据持久化存储,应用支持卸载、监听应用卸载和安装并显示。 3.…

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

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

武汉星起航:亚马逊上的中国智慧,创新与差异化策略赢得全球赞誉

在全球电商的浪潮中,亚马逊作为行业的佼佼者,为众多商家提供了一个展示自我、实现价值的舞台。在这其中,中国商家以其独特的创新和差异化策略,逐渐在亚马逊平台上崭露头角,赢得了全球消费者的青睐。 中国商家在亚马逊…

新手入门:大语言模型训练指南

在这个信息爆炸的时代,人工智能技术正以前所未有的速度渗透到我们生活的方方面面。从智能手机上的语音助手到自动驾驶汽车,AI的应用无处不在。而在这些令人惊叹的技术背后,大语言模型(LLM)扮演着至关重要的角色。它们不…

(六)Pandas文本数据 学习简要笔记 #Python #CDA学习打卡

一. 文本数据简介 1)定义 指不能参与算术运算的任何字符,也称为字符型数据。如英文字母、汉字、不作为数值使用的数字(以单引号开头)和其他可输入的字符。 文本数据虽不能参加算术运算,但其具有纬度高、量大且语义复杂等特点,因…

企业微信扫码登录遇到的bug及解决办法

企业微信自建应用扫码登录 1.基本配置 1.登录企业微信管理系统,新建一个自建应用 2.点击你新建的应用,拿到AgentId 3.在我的企业页面拿到appid 4.配置可信域名 5.配置授权回调域 写到这,基本配置已完成,可以开始写前端代码 …

【高级RAG技巧】在大模型知识库问答中增强文档分割与表格提取

前言 文档分割是一项具有挑战性的任务,它是任何知识库问答系统的基础。高质量的文档分割结果对于显著提升问答效果至关重要,但是目前大多数开源库的处理能力有限。 这些开源的库或者方法缺点大致可以罗列如下: 只能处理文本,无法…

MySql8快速迁移版的制作过程

首先说明,mysql 8的安装不同与mysql5.x。 做程序的朋友都知道,程序好做,客户难伺候,因为限于用户的情况,如何能让用户把程序运行起来很关键,比如日前我在做 山东高中信息技术 学考 考前练习 系统时&#x…

解决 vue install 引发的 failed Error: not found: python2 问题

发生 install 异常时,提示信息如下所示: npm ERR! code 1 npm ERR! path U:\cnblogs\fanfengping-dtops\fanfengping-dtops-front\node_modules\node-sass npm ERR! command failed npm ERR! command U:\Windows\system32\cmd.exe /d /s /c node scripts…

苍穹外卖学习笔记(5.微信登录,商品浏览)

目录 一、微信登录1、封装HttpClient工具类2、导入小程序代码3、微信登录流程4、需求分析设计5、代码开发6、功能测试 二、商品浏览1、需求分析设计2、代码开发1.查询分类2.根据分类id查询套餐3.根据分类id查询套餐,根据套餐id查询包含菜品 3、测试 四、相关知识1、…

Django模型的字段类型

Django模型中最重要并且也是唯一必须执行的就是字段定义。字段在类中进行定义,对应于实体数据库的字段。另外,定义模型字段名时为了避免冲突,不建议使用模型API中已经定义的关键字。 字段类型用以指定数据库的数据类型,例如Integ…

python入门之简洁安装VS保姆版安装(含虚拟环境)

11、保姆版安装 Anoconda安装(python的一个发行版本) 优点:集成了许多关于python科学计算的第三方库,保姆级别 下载:www.anaconda.com/download/ 版本默认64位,py37 √:add anaconda to my…

代码随想录算法训练营第三十八天|509. 斐波那契数,70.爬楼梯,746. 使用最小花费爬楼梯

动态规划(DP) 如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的 一、动态规划包含哪些问题? 1、基础问题,如斐波那契数 2、背包问题,很经典的问题 3、打家劫舍 4、…

操作系统命令(贪吃蛇项目)

🏝1.获得句柄 GetStdHandle是⼀个Windows API函数。它用于从⼀个特定的标准设备(标准输入、标准输出或标 准错误)中取得⼀个句柄(用来标识不同设备的数值),使用这个句柄可以操作设备。 ⛳️函数原型&…

Git使用总结(不断更新中)

branch 本地分支操作 删除本地分支 git branch -d <local-branch-name>远端分支操作 从远端分支创建本地分支 git checkout -b <local-branch-name> origin/<remote-branch-name>git ignore 如果工程的代码文件中有不希望上传到远端的文件&#xff0c;…