C#基础——文件、文件夹操作和序列化存储

文件操作、文件夹操作和序列化存储

1、文件操作

如果要对文件进行操作,首先需要先引入IO命名空间

using System.IO;

File 类位于 System.IO 命名空间中,用于执行文件级别的操作。它提供了一组静态方法,用于创建、复制、删除、移动和读取文件内容等操作。

文件操作的核心是文件路径

// @ 表示后续是一个原始字符串
// D 表示电脑的盘符
// \ 代表下一层
// myfile.txt
string filePath = @"D:\cSharp\myfile.txt"; //声明一个文件路径

Create 创建文件

File.Create("D:\cSharp\myfile.txt");

WriteAllText 创建一个新文件并写入内容,如果文件存在,则会被覆盖

string filePath =  @"D:\cSharp\myfile.txt"; //创建一个文件路径
string content = "Hello, this is some content。";// 创建一个新文件并写入内容
File.WriteAllText(filePath, content);

WriteAllLines 创建文件写入指定数组然后关闭该文件

string[] contentArray = { "张三", "李四", "王五", "赵六", "陈七" }; //创建一个数组
File.WriteAllLines("D:\cSharp\yofile.txt", contentArray);

ReadAllText 读取文件内容

string textContent = File.ReadAllText("D:\cSharp\myfile.txt");
Console.WriteLine(textContent) //Hello, this is some content。

AppendAllText 追加内容到文件

//第一个参数是文件地址,第二个参数是需要添加的内容
File.AppendAllText("D:\cSharp\myfile.txt", "Content to append");

Copy 复制文件

//第一个参数是需要复制的文件地址,第二个参数是新的文件地址
File.Copy("D:\cSharp\myfile.txt", "D:\cSharp\yofile.txt");

Move 移动文件

//第一个参数是需要移动的文件,第二个参数是新的文件地址
File.Move("D:\cSharp\myfile.txt", "E:\cSharp\yofile\youfile.txt");

Delete 删除文件

File.Delete("D:\cSharp\yofile.txt");

Exists 判断文件是否存在

File.Exists("D:\cSharp\yofile.txt"); //返回一个布尔值

StreamReader:实现一个可读取有序字符系列的读取器,使其以一种特定的编码从字节流中读取字符。

string path = @"D:\CSharp课件\test.txt";
//根据路径实例化读取对象
StreamReader sr = new StreamReader(path);
//ReadToEnd 获取到当前流中读取到的内容
Console.WriteLine(sr.ReadToEnd());
//因为属于流操作,所以使用完毕之后最好是关闭,节省资源
//Close 关闭流
sr.Close();

StreamWriter:实现一个编写一个有序字符系列的编写器,使其以一种特定的编码向流中写入字符。

 string namePath = @"D:\CSharp课件\test.txt";//如果路径下没有该文件,则会先创建文件,在写入StreamWriter streamWriter = new StreamWriter(namePath);//写入内容streamWriter.Write("关注");streamWriter.Write("郭贝贝同学");streamWriter.WriteLine("博主");streamWriter.WriteLine("一起");streamWriter.WriteLine("学习");streamWriter.WriteLine("编程");//使用循环把List写入到文件中List<int> ints = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };foreach (int i in ints) {streamWriter.WriteLine(i);}
//Close 关闭流streamWriter.Close();

FileStream:为文件提供字节序列的一般视图,既支持同步读写操作,也支持异步读写操作。

StreamReader:实现一个可读取有序字符系列的读取器,使其以一种特定的编码从字节流中读取字符。

string dicPath = @"D:\CSharp\dic.txt";
if (!File.Exists(dicPath)) {//如果文件不存在//参一代表文件路径,参二代表文件创建的模式,参三代表文件操作权限FileStream fs = new FileStream(dicPath, FileMode.Create, FileAccess.Write);//fs中保存的是关于当前文件的配置信息StreamWriter sw = new StreamWriter(fs);sw.WriteLine("FileStream相比较单文件路径,优势明显");sw.Close();fs.Close();
} else {//存在则读取FileStream fs = new FileStream(dicPath, FileMode.OpenOrCreate, FileAccess.ReadWrite);StreamWriter sw = new StreamWriter(fs);sw.WriteLine("这是追加的内容");sw.Close();fs.Close();
};

2、文件夹操作

Directory:是一个用来操作文件夹的类

CreateDirectory 创建一个文件夹

string dicPath = @"D:\\CSharp课件\myDirectory"
string content = "这是myDirectort文件夹中的文件内容";
Directory.CreateDirectory(dataPath);

Exists 检测当前有没有文件夹

WriteAllText 创建一个新文件,写入内容,然后关闭该文件

if (Directory.Exists(dicPath)) {Directory.CreateDirectory(dicPath);//Path.Combine 路径合并string filePath = Path.Combine(dataPath, "data.txt");//WriteAllText 创建一个新文件,写入内容,然后关闭该文件//参数一是文件路径,参数二是要写入的内容//如果已有该文件,则覆盖该文件File.WriteAllText(filePath, content);
} else {string filePath = Path.Combine(dataPath, "data.txt");File.WriteAllText(filePath, content);
}

Delete 删除文件夹

Directory.Delete(dicPath);

3、序列化存储

如果直接对对象类型进行写入或读取操作,是没有办法获得想要的结果的。

如果想要把引用类型进行正确的读或者是写,需要先对引用类型进行序列化与反序列化操作才可以。

序列化存储:将对象转换为字节流或其他格式,以便在需要时能够重新构造出相同的对象。

序列化存储的目的:

  1. 持久化存储: 将对象转换为文件或数据库中的格式,使其在程序重新启动或在不同的系统之间传输时能够保持状态。
  2. 数据交换: 在不同系统或平台之间传输对象数据,序列化能够将对象转换为通用的数据格式,便于传输和解析。
// [Serializable] 添加可以序列化的特性,注意,如果不添加,那么该类不支持序列化。
[Serializable]
internal class Student
{public string Name { get; set; }public int Age { get; set; }
}Student student = new Student()
{Name = "郭贝贝同学",Id = 18
};
//@"students.txt"在当前项目的debug目录下
FileStream fileStream = new FileStream(@"students.txt", FileMode.OpenOrCreate);
// BinaryFormatter 二进制格式化器
BinaryFormatter formatter = new BinaryFormatter();
//Serialize 将对象序列化到给定的流中
formatter.Serialize(fileStream, student);
fileStream.Close(); //关闭流

反序列化

//Deserialize 指定的流反序列化
//并将其转换为 Student 类型的对象
Student str = formatter.Deserialize(fileStream) as Student;
fileStream.Close();
Console.WriteLine("对象读取成功:"+str.Name); //郭贝贝同学

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

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

相关文章

漫谈UNIX、Linux、UNIX-Like

漫谈UNIX、Linux、UNIX-Like 使用了这么多年Redhat、Ubuntu等Linux、Windows、Solaris操作系统&#xff0c;你是否对UNIX、Unix-Like&#xff08;类UNIX&#xff09;还是不太清楚&#xff1f;我以前一直认为Unix-Like就等于Linux。其实&#xff0c;由UNIX派生出来而没有取得UN…

java实现回文数算法

判断一个数是否为回文数可以使用以下算法&#xff1a; 将数字转化为字符串&#xff1b;初始化左右两个指针&#xff0c;分别指向字符串的首尾&#xff1b;循环比较左右指针指向的字符&#xff0c;如果相等则继续比较&#xff0c;直到左右指针相遇或者发现不相等的字符为止&…

ES集群G1回收器,堆空间无法被回收问题

ES堆空间不足的问题&#xff0c;困扰了我有两年的时间。dump堆去分析&#xff0c;也未能分析出来&#xff0c;堆到底是被什么占用了。 我把堆空间给了31.9G&#xff0c;这是指针压缩生效的临界值&#xff0c;如果再大就指针压缩失效了。 痛苦的是&#xff0c;随着时间的增长。堆…

mysql复习笔记05(小滴课堂)

mysql的慢查询日志开启与问题定位 一张数据库数据很大的表。 查询一条数据&#xff0c;很快就查询出来了。 根据不同的条件&#xff0c;查到的数据相同&#xff0c;但是查询所花费的时间却是不同的。 使用命令查询慢查询日志是否开启&#xff0c;目前它是关闭着的。 开启日志。…

利用prometheus+grafana进行Linux主机监控

文章目录 一.架构说明与资源准备二.部署prometheus1.上传软件包2.解压软件包并移动到指定位置3.修改配置文件4.编写启动脚本5.启动prometheus服务 三.部署node-exporter1.上传和解压软件包2.设置systemctl启动3.启动服务 四.部署grafana1.安装和启动grafana2.设置prometheus数据…

Java研学-HTTP 协议

一 概述 1 概念和作用 概念&#xff1a;HTTP 是 HyperText Transfer Protocol (超文本传输协议)的简写&#xff0c;它是 TCP/IP 协议之上的一个应用层协议。简单理解就是 HTTP 协议底层是对 TCP/IP 协议的封装。   作用&#xff1a;用于规定浏览器和服务器之间数据传输的格式…

【源码解析】聊聊ReentrantReadWriteLock是如何实现的读写锁

为什么需要读写锁 在并发编程领域&#xff0c;有多线程进行提升整体性能&#xff0c;但是却引入了共享数据安全性问题。基本就是无锁编程下的单线程操作&#xff0c;有互斥同步锁操作&#xff0c;但是性能不高&#xff0c;并且同一时刻只有一个线程可以操作资源类。但是对于大…

[SWPUCTF 2021 新生赛]gift_F12

打开环境 题目有提示&#xff08;F12&#xff09;&#xff0c;那就查看一下源代码 直接滑到最后 看提示猜测&#xff0c;flag就在源代码里了 ctrlf查找flag 最后得到flag&#xff0c;改一下形式就可以了

ORACLE总结

例1&#xff1a; 现在有 医嘱主表ORDER_MAIN(ID,ORDER_ID,ORDER_NAME) A表 和医嘱执行表ORDER_EXEC(ID,ORDER_ID,PLAN_TIME) B表 两个表是用ORDER_ID关联起来的&#xff0c;A表一个ORDER_ID对应一条数据&#xff0c;B表一个ORDER_ID对应多个字段&#xff0c;要求根据ORDER_…

网络技术基础与计算思维实验教程_2.4_跨交换机VLAN配置实验

实验内容 实验目的 实验原理 实验步骤 构建 在工作区放置交换机然后单击 选择config , 把交换机的默认名改为switch1 再放置两个交换机 再放置终端 放置三台与交换机1相连的终端 再放置三台与交换机3相连的终端 再放置两台与交换机2相连的终端 用直通线连接 然后用交叉线互联交…

java8流库之Stream.iterate

简介 java.util.stream.Stream 下共有两个 iterate iterate(T seed, final UnaryOperator<T> f)iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> f) 该方法产生一个无限流&#xff0c;它的元素包含seed&#xff0c;在seed上调用f产生的…

Matlab论文插图绘制模板第131期—函数等高线图

在之前的文章中&#xff0c;分享了Matlab函数折线图的绘制模板&#xff1a; 函数三维折线图&#xff1a; 函数网格曲面图&#xff1a; 函数曲面图&#xff1a; 进一步&#xff0c;再来分享一下函数等高线图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数…

【Week-P2】CNN彩色图片分类-CIFAR10数据集

文章目录 一、环境配置二、准备数据三、搭建网络结构四、开始训练五、查看训练结果六、总结3.1 ⭐ torch.nn.Conv2d()详解3.2 ⭐ torch.nn.Linear()详解3.3 ⭐torch.nn.MaxPool2d()详解3.4 ⭐ 关于卷积层、池化层的计算4.2.1 optimizer.zero_grad()说明4.2.2 loss.backward()说…

MyBatis Plus使用遇到的问题

如果想使用Mapper的xxxById()方法&#xff0c;实体类的主键上面必须加上TableId注解&#xff0c;如果不加&#xff0c;会报错 2023-12-21 22:48:33.526 WARN 11212 --- [ main] c.b.m.core.injector.DefaultSqlInjector : class com.example.mybatisplusdemo.dom…

ubuntu18.04 64 位安装笔记——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

进入VirtuakBox官网&#xff0c;网址链接&#xff1a;Oracle VM VirtualBoxhttps://www.virtualbox.org/ 网页连接&#xff1a;Ubuntu Virtual Machine Images for VirtualBox and VMwarehttps://www.osboxes.org/ubuntu/ 将下发的ds_db01.sql数据库文件放置mysql中 12、编写S…

无约束优化问题求解笔记(2):最速下降法

目录 3. 最速下降法3.1 最速下降法的基本思想3.2 基于精确搜索的最速下降法3.3 基于精确搜索的最速下降法的程序实现3.4 基于精确搜索的最速下降法的缺点 Reference 3. 最速下降法 3.1 最速下降法的基本思想 最速下降法是典型的线搜索方法. 设 f f f 是 R n \mathbb{R}^n R…

vue2与vue3的区别

首先了解什么是vue3 Vue.js 3.0&#xff08;简称Vue 3&#xff09;是一个流行的JavaScript框架Vue.js的最新版本。Vue 3于2020年9月正式发布&#xff0c;带来了许多令人兴奋的新特性和改进。下面是Vue 3的一些主要特点&#xff1a; 更快的性能&#xff1a;Vue 3通过全新的响应…

【redis】redis系统实现发布订阅的标准模板

目录 简介参数配置代码模板 简介 Redis发布订阅功能是Redis的一种消息传递模式&#xff0c;允许多个客户端之间通过消息通道进行实时的消息传递。在发布订阅模式下&#xff0c;消息的发送者被称为发布者&#xff08;publisher&#xff09;&#xff0c;而接收消息的客户端被称为…

Easyexcel读取单/多sheet页

Easyexcel读取单/多sheet页 此文档会说明单个和多个的sheet页的读取方法&#xff0c;包括本人在使用过程中的踩坑点。 依赖不会的自行百度导入&#xff0c;话不多说&#xff0c;直接上干货。以下示例基于2.x&#xff0c;新版本基本类似 1、创建实体 实体是用来接收对应列的数据…

【QT】QGraphicsView和QGraphicsItem坐标转换

坐标转换 QGraphicsItem和QGraphicsView之间的坐标转换需要通过QGraphicsScene进行转换 QGraphicsView::mapToScene() - 视图 -> 场景QGraphicsView::mapFromScene() - 场景 -> 视图QGraphicsItem::mapToScene() - 图元 -> 场景QGraphicsItem::mapFromScene() - 场景 …