Unity开发之C#基础-File文件读取

前言

今天我们将要讲解到c#中 对于文件的读写是怎样的 那么没接触过特别系统编程小伙伴们应该会有一个疑问 这跟文件有什么关系呢? 我们这样来理解 首先 大家对电脑或多或少都应该有不少的了解吧 那么我们这些软件 都是通过变成一个一个文件保存在电脑中 我们才可以去使用他们对吧 就好比下载一个软件实际上就是把这个软件的启动条件也就是各种文件保存到电脑中而已 在比如 在我们开发或者玩游戏的时候很多游戏都有存档吧 不能说我这关没完玩 下次再玩直接就是消失了重新玩了 那也太变态了,其实对此 就涉及到了通过读写的操作 将我们想要保存的游戏数据 储存到当前玩家的电脑当中 (单机游戏)普遍都是这样 不过现在很多大型的游戏都是选择把数据保存到服务器那边 这样不管你换手机也好还是异地登陆都可以继承本来的数据 等等很多例子。下面我们初步了解以下 程序中的文件读写

文章目录

文件

程序变量存储位置

在之前我们介绍过 比如 我们定义的int,float 等值类型变量 都会暂时存储在"堆""栈" 哪怕是参数 静态成员 局部变量等等都是一样 可这些存储位置和存储的数据只能供我们在运行程序时使用 一旦我们关闭了程序他们就会消失 如何将这些数据持久化呢 这就是我们接下来要学习的通过"流"的形式将数据保存在一个文件中 进行读写

程序中文件的介绍

  1. 文件是一种数据持久化的形式
  2. 有名称,路径
  3. 数据以字节的形式存储在文件中
  4. 可通过"流"的形式读写

文件相关类

类名 说明
Path 静态类,用于路径,文件名字字符串处理
DIrectory 静态类,包含一些处理目录的静态方法
File 静态类,包含一些处理文件的静态方法

我们来逐一的介绍一下这几个类的使用方式

Path类

方法名 说明
Combine 将多个字符串加入/或者\拼接成一个路径字符串
GetFileName 获取全路径字符串中的文件名,包含后缀
GetExtension 获取全路径字符串中的后缀
GetDirectoryName 获取全路径字符串中的目录部分
GetFullPath 获取全路径
GetPathRoot 获取根路径

我们创建一个新的项目 来好好试验一下这些方法的作用 在此之前 大家先去各自的盘里创建一个新的txt文本文件来为我们一会使用做准备:

我呢 在自己的e盘里创建了一个test文件夹 里面有创建了一个love的txt文本文档。

Directory类

方法名 说明
CreateDirectory 创建目录
Delete 删除目录
Exists 判断目录是否存在
GetParent 获取父目录
GetFIles 获取目录中的文件
GetDirectories 获取目录中的子目录
Move 移动目录,包含其中的文件和子目录

File类

方法名 说明
Create 创建文件
Delete 删除文件
Exists 判断文件是否存在
WriteAllText 将字符产写入文件中
AriteAllBytes 将字节数组写入文件中
AppendAllText 将字符串追加到文件中
ReadAllLines 读取文件的所有行,以字符串数组返回
ReadAllBytes 读取文件中的所有字节,以字节数组返回
Copy 拷贝文件
Move 移动文件

这就是三个基本的文件类的方法使用,下面我们介绍另一种方式:流

流(Stream)

流(Stream)可以理解为内存中的字节序列,Stream是所有流的抽象基类

• 对流进行读取------将流中的数据读取到具体的数据结构中

• 对流进行写入------把数据结构中的数据写入到流中

流的分类

流分为两种 字符流和字节流

  1. 字节流: 以字节为单位进行读写,能处理任何类型数据
  2. 字符流:以字符为单位进行读写,只能处理字符数据

这几个类 是我们要经常用到的:

  1. NetworkStream------提供网络通信的基础数据流

  2. FileStream------用于将数据以流的形式写入文件,或从文件中读取

  3. MemoryStream------用于对内存中的数据进行写入或读取

  4. GZipStream------提供用于压缩和解压缩流的数据

读写器的分类

Stream类是流的整体的父类 旗下还有我们经常使用的读写类 被称为读写器类

  1. 文本读写器:TextReader TextWriter
  2. 字符串读写器: StringReader StringWriter
  3. 二进制读写器:BinaryReader BinaryWriter
  4. 流读写器:StreamReader StreamWriter

流的使用与基本的文件读取 而且流的表达形式也不同 不过 基本上的表达方式是一致的

下面是一些基本的方法介绍:

StreamReader

构造器 说明
StreamReader(Stream) 在一个字节流上建立流读取器,用于读取字符
StreamReader(string) 在文件上建立流读取器,用于读取字符
StreamReader(Stream,Encoding) 可指定字符集
StreamReader(string,Encoding) 可知道字符集
方法 说明
Read 都一个字符并返回,如到达底部返回-1
ReadLine 读一行字并返回一字符串,如到达底部返回null
ReadToEnd 读全部文本,返回一字符串
Close 关闭

StreamWriter

构造器 说明
StreamWriter(Stream) 在一个字节流上建立流写出器,用于写字符
StreamWriter(string) 在文件上建立流写出器,用于写字符
StreamWriter(Stream,Encoding) 可指定字符集
方法 说明
-- --
Write 具有多个重载,都以字符形式写数据
WriteLine 具有多个重载,都以字符形式写数据,结尾会换行
AutoFlush 可设置或查询是否自动刷缓存
Flush 强制刷缓存
Close 关闭

小技巧


总结

对于文件读取写入等操作有太多需要使用的方法等 需要大家尝试各种方法的使用 代码也是万变不离其宗的 下期我们讲解最后一章委托的使用

相关推荐
杨荧12 分钟前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
白子寰18 分钟前
【C++打怪之路Lv14】- “多态“篇
开发语言·c++
charon877829 分钟前
UE ARPG | 虚幻引擎战斗系统
游戏引擎
王俊山IT30 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
为将者,自当识天晓地。32 分钟前
c++多线程
java·开发语言
小政爱学习!34 分钟前
封装axios、环境变量、api解耦、解决跨域、全局组件注入
开发语言·前端·javascript
k09331 小时前
sourceTree回滚版本到某次提交
开发语言·前端·javascript
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
Themberfue1 小时前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
plmm烟酒僧1 小时前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv