C#中使用I/O文件流

news/2024/5/19 21:44:53 标签: c#, 开发语言, .netcore

流,即是二进制数值,文件和流 I/O(输入/输出)是指在存储媒介中传入或传出数据。 在 .NET 中,System.IO 命名空间包含允许以异步方式和同步方式对数据流和文件进行读取和写入操作的类型。 这些命名空间还包含对文件执行压缩和解压缩的类型,以及通过管道和串行端口启用通信的类型。

  • 命名空间:System.IO

  • 程序集:System.Runtime.dll

File类

AppendAllLines

//追加行方法
//目录不存在时会报错,目录存在文件不存在时会自动生成
File.AppendAllLines(@"D:\val\log.txt",new List<string>{$"第一行{DateTime.Now}",$"第二行{DateTime.Now}"},Encoding.UTF8);

执行了两次,可以看见使用AppendAllLines会自动换行

其中Encoding.UTF8是指编码格式,如果是utf-8可以默认不写,换成Encoding.ASCII再执行一次,因为记事本是utf-8的编码格式,所以打开出现了乱码

AppendAllText

与AppendAllLines不同的是使用AppendAllText时不会进行换行

File.AppendAllText(@"D:\val\log.txt",$"追加文本内容1{DateTime.Now}");
File.AppendAllText(@"D:\val\log.txt",$"追加文本内容2{DateTime.Now}");

AppendText

AppendText是流写入,使用流写入要注意完成功能后需要释放资源

var streamWriter = File.AppendText(@"D:\val\log.txt");
streamWriter.WriteLine("通过streamWriter对象写入");
streamWriter.Flush();//刷新缓冲区
streamWriter.Close();//关闭流

这里补充一下close和Using的区别

在C#中,using和close都是用于释放资源的方法,但是它们之间有一些区别。using语句会自动调用Dispose方法来释放资源,而close方法只是关闭当前的连接或者资源,只要其后没有dispose,还可以继续open连接,即close并未释放资源,只做了关闭

使用范围:

using是用于定义在范围之内的对象,使得该对象在使用完毕后自动被销毁并释放资源。using语句块结束时,编译器会自动调用对象的Dispose()方法,这是因为该对象必须实现IDisposable接口,这样才能使用using语句。

close则是用于流(如文件、网络、数据库等)的关闭操作,这是因为流在使用完毕之后需要立即被关闭以释放底层资源。

生命周期:

using提供了一个便利的方式来确保对象的Dispose()方法及时被调用来释放资源,可以有效地管理对象生命周期。而close则是一种操作,不进行调用也不会有内存泄漏的问题。

Copy复制

将一个文件复制到指定路径

//原文件必须存在,不允许覆盖同名文件
File.Copy(@"D:\val\log.txt",@"D:\val\log2.txt");
//第三个参数为true表示允许覆盖同名文件,默认为false
File.Copy(@"D:\val\log.txt",@"D:\val\log2.txt",true);

Create创建流

//创建一个文件流,再使用流写入
using var fileStream = File.Create(@"D:\val\log.txt");
using StreamWriter writer = new StreamWriter(fileStream);
writer.WriteLine("通过streamWriter对象写入");

使用这种方式需要释放资源

Delete删除

File.Delete(@"D:\val\log.txt");

Move移动

移动就相当于我们常用的剪切,和复制一样第三个参数为true则可覆盖同名文件

File.Move(@"D:\val\log.txt", @"D:\val\log2.txt", true);

Exists判断是否存在

if (File.Exists(@"D:\val\log.txt"))
{
    Console.WriteLine("存在");
}
else
{
    Console.WriteLine("不存在");
}

Open打开

File的Create和Open方法都可以用于创建或打开文件,但是它们有着一些区别,具体如下:

文件是否存在

如果文件不存在,则Create方法将创建一个新的文件,而Open方法将引发一个异常。

打开方式

Create方法使用FileMode枚举值来指定打开方式,例如CreateNew、Create、OpenOrCreate等,而Open方法则使用FileMode枚举值来指定打开方式,例如Open、OpenOrCreate、Truncate等。

文件句柄

Create方法将返回一个FileStream对象,该对象表示新创建的文件,可以使用该对象对文件进行写入操作。Open方法将返回一个FileStream对象,该对象表示已经存在的文件,可以使用该对象对文件进行读取和写入操作。

是否清空文件

Create方法在创建新文件时清除其内容,而Open方法仅仅将文件指针移到文件的开头,文件的内容仍然存在,当需要清除文件内容时需要自己实现。

总体来说,Create方法用于在指定路径创建一个新的文件,而Open方法用于打开一个已经存在的文件,并返回FileStream对象来读取和写入文件内容。

using var fileStream = File.Open(@"D:\val\log.txt", FileMode.Open);
using StreamWriter writer = new StreamWriter(fileStream);
writer.WriteLine($"OpenTxt----");

执行多次后打开txt,如图,使用open打开的文件,进行写的时候会覆盖原有的文件内容

如果使用File.Open方法打开文件但没有指定访问方式,则默认以读写方式(FileAccess.ReadWrite)打开文件

//只写
File.Open(@"D:\val\log.txt", FileMode.Open,FileAccess.Write));
//只读
File.Open(@"D:\val\log.txt", FileMode.Open,FileAccess.Read));

OpenRead只读

File.OpenRead是File类的静态方法,该方法只需要传入文件路径即可返回一个只读的FileStream对象进行读取操作;如果只需要对文件进行简单的只读操作,可以使用File.OpenRead方法,这样简单明了。而如果需要更加灵活地进行文件读写操作,则需要使用File.Open方法,并根据实际需求选择适当的访问权限以及共享方式。

using var fileStream = File.OpenRead(@"D:\val\log.txt");

OpenWrite只写

using var fileStream = File.OpenWrite(@"D:\val\log.txt");

ReadAllLines读取并关闭

var readAllLines = File.ReadAllLines(@"D:\val\log.txt",Encoding.UTF8);
Console.WriteLine(readAllLines[0]);
Console.WriteLine(readAllLines[1]);

FileInfo类

  • FileInfo 类表示一个文件的元数据,包括文件名、文件路径、文件大小、创建时间、修改时间等等。使用 FileInfo 类,你可以获取或设置这些文件属性,并执行一些简单的操作,比如把文件拷贝到指定目录、移动文件到别的位置、重命名文件等等。

  • File 类提供了一些静态方法来操作文件本身,比如读取文件内容、写入文件内容、删除文件等等。使用 File 类,你可以执行一些基本的文件操作,而无需使用文件对象或元数据,比如复制、移动或重命名文件。

如果你只需要获取或修改文件的元数据,使用 FileInfo 类更好。而如果你需要执行一些基本的文件操作,使用 File 类更合适。

如果对同一个文件进行多次操作,使用FileInfo会更加高效,因为FileInfo不会做安全检查

var fileInfo = new FileInfo(@"D:\val\log.txt");

可以看出FileInfo类的方法比File类要多,并且使用FileInfo不需要使用 using 语句块自动关闭和释放这些类的资源,因为 FileInfo 类不会直接打开或读取文件,只是表示文件的元数据信息。如果你需要访问文件内容,你需要使用其他类,如 FileStreamStreamReader。👇

var fileInfo = new FileInfo(@"D:\val\log.txt");
using var fileStream = fileInfo.OpenRead();
var streamReader = new StreamReader(fileStream);
Console.WriteLine(streamReader.ReadLine());

DirectoryInfo类(操作目录)

DirectoryInfo用于创建移动和遍历目录

创建目录

var directoryInfo = new DirectoryInfo(@"D:\val");

打开D盘该路径下以及有val文件夹了,在里面创建点东西。

//获取路径下的子文件夹,遍历一下
var enumerateDirectories = directoryInfo.EnumerateDirectories();
foreach (var VARIABLE in enumerateDirectories)
{
    Console.WriteLine(VARIABLE.FullName);
}

EnumerateDirectories方法增加一点参数,

var enumerateDirectories = directoryInfo.EnumerateDirectories("*",SearchOption.AllDirectories);

获取到了路径下的所有文件夹

获取文件

var fileInfo = new DirectoryInfo(@"D:\val");
var fileInfos = fileInfo.GetFiles("*.*", SearchOption.AllDirectories);


http://www.niftyadmin.cn/n/190710.html

相关文章

小游戏也要讲信用

当下&#xff0c;小游戏鱼龙混杂&#xff0c;官方为能更好地保护用户、开发者以及平台的权益&#xff0c;近日宣布7月1日起试行小游戏主体信用分机制。 主体信用分是什么呢&#xff1f;简单来说&#xff0c;这是针对小游戏主体下所有小游戏帐号行为&#xff0c;对开发者进行评…

小黑子—Java从入门到入土过程:第五章

Java零基础入门5.0Java系列第五章1. 方法1.1 方法的简单定义1.2 带参方法1.3 带返回值的方法和调用1.4 方法小结return 关键字换行1.5 方法的重载1.6 方法的基本内存原理1.7 方法的值传递2. 基本数据类型和引用数据类型3. 综合练习3.1 案例一&#xff1a;卖飞机票快捷键自动抽取…

【信息系统项目管理师教程(第4版)】目录及思维导图

思维导图 https://www.mubucm.com/doc/qbBKiiPRMK&#xff08;幕布&#xff09; 目录 第1章信息化发展1 1.1信息与信息化11.1.1信息21.1.2信息系统21.1.3信息化41.2现代化基础设施71.2.1新型基础设施建设71.2.2工业互联网81.2.3车联网101.3现代化创新发展121.3.1农业农村现代…

MySQL数据库——数据库系统是什么?它由哪几部分组成?

数据库系统&#xff08;Database System&#xff0c;DBS&#xff09;由硬件和软件共同构成。硬件主要用于存储数据库中的数据&#xff0c;包括计算机、存储设备等。软件部分主要包括数据库管理系统、支持数据库管理系统运行的操作系统&#xff0c;以及支持多种语言进行应用开发…

Sibelius2023西贝柳斯中文版功能下载使用教程

Sibelius是一款功能强大的乐谱制作软件&#xff0c;在电脑上制作乐谱&#xff0c;可以让设计的速度更加快速&#xff0c;您可以直接通过Sibelius的录制功能将歌曲的数字音乐录制到软件上&#xff0c;也可以直接将MIDI录制的节拍数据复制到软件上打开&#xff0c;让你在编辑节拍…

mysql创建student表并使用视图查询的相关练习

文章目录一、题目二、代码实现以及操作步骤1、进入Linux下的mysql2、用sql语句创建表及查询1.用SQL语句创建学生表student&#xff0c;定义主键&#xff0c;姓名不能重名&#xff0c;性别只能输入男或女&#xff0c;所在系的默认值是 “计算机”。2.修改student 表中年龄&#…

Winform在Graphics中 DrawString绘制文字自动换行

winform遇到重写控件时 会绘制文字&#xff0c;如何做到文字按照指定的宽度自动换行。思路是根据文字的长度与指定长度做比较&#xff0c;超出则截断&#xff0c;换行行开始绘制。代码如下 private void DrawStringWithLineBreaks(Graphics g, string text, Font font, Brush b…

python干饭神器---今天吃什么?python告诉你

文章目录一、前言二、准备工作三、编写代码2.1 导入所需的库2.2 创建GUI界面2.3 设置窗口居中显示2.4 设置切换按钮和当前食物的label 以及图片展示 切换方法2.5 完整代码四、打包exe运行程序&#xff0c;方便在其他windows电脑上使用4.1 安装pyinstaller打包程序4.2 执行打包4…