深入理解C#中的文件系统I/O操作

        文件系统I/O操作是任何编程语言中的重要组成部分,C#也不例外。无论是读写文件、操作目录,还是处理文件流,C#都提供了丰富且强大的类库来实现这些功能。本文将详细介绍C#中的文件系统I/O操作,并通过代码示例展示如何高效地处理文件和目录。

1. 读写文件
写入文件

在C#中,可以使用System.IO命名空间下的File类来进行文件写入操作。

示例:

using System;
using System.IO;class Program
{static void Main(){string path = "example.txt";string content = "这是一个示例文本。";// 写入文件File.WriteAllText(path, content);Console.WriteLine("文件写入成功。");}
}
读取文件

同样,我们也可以使用File类来读取文件内容:

using System;
using System.IO;class Program
{static void Main(){string path = "example.txt";if (File.Exists(path)){// 读取文件内容string content = File.ReadAllText(path);Console.WriteLine("文件内容:");Console.WriteLine(content);}else{Console.WriteLine("文件不存在。");}}
}
2. 使用文件流

文件流提供了一种更灵活的文件读写方式,特别是在处理大文件时,文件流能够逐字节地读写数据,从而避免内存占用过高。

使用FileStream写入文件
using System;
using System.IO;class Program
{static void Main(){string path = "filestream_example.txt";byte[] data = System.Text.Encoding.UTF8.GetBytes("通过FileStream写入的数据。");using (FileStream fs = new FileStream(path, FileMode.Create)){fs.Write(data, 0, data.Length);Console.WriteLine("数据已通过FileStream写入。");}}
}
使用FileStream读取文件
using System;
using System.IO;class Program
{static void Main(){string path = "filestream_example.txt";using (FileStream fs = new FileStream(path, FileMode.Open)){byte[] data = new byte[fs.Length];fs.Read(data, 0, data.Length);string content = System.Text.Encoding.UTF8.GetString(data);Console.WriteLine("通过FileStream读取的内容:");Console.WriteLine(content);}}
}
3. 操作目录
创建目录

在C#中,可以使用Directory类来创建目录:

using System;
using System.IO;class Program
{static void Main(){string dirPath = "example_directory";if (!Directory.Exists(dirPath)){Directory.CreateDirectory(dirPath);Console.WriteLine("目录创建成功。");}else{Console.WriteLine("目录已存在。");}}
}
删除目录

可以使用Directory类来删除目录:

using System;
using System.IO;class Program
{static void Main(){string dirPath = "example_directory";if (Directory.Exists(dirPath)){Directory.Delete(dirPath, true);Console.WriteLine("目录已删除。");}else{Console.WriteLine("目录不存在。");}}
}
4. 遍历文件和目录
获取目录中的文件列表

可以使用Directory类获取指定目录中的文件列表:

using System;
using System.IO;class Program
{static void Main(){string dirPath = "example_directory";if (Directory.Exists(dirPath)){string[] files = Directory.GetFiles(dirPath);Console.WriteLine("目录中的文件:");foreach (string file in files){Console.WriteLine(file);}}else{Console.WriteLine("目录不存在。");}}
}
递归遍历目录

可以使用递归算法遍历目录及其子目录中的所有文件:

using System;
using System.IO;class Program
{static void Main(){string dirPath = "example_directory";if (Directory.Exists(dirPath)){TraverseDirectory(dirPath);}else{Console.WriteLine("目录不存在。");}}static void TraverseDirectory(string dirPath){string[] files = Directory.GetFiles(dirPath);string[] directories = Directory.GetDirectories(dirPath);foreach (string file in files){Console.WriteLine("文件: " + file);}foreach (string directory in directories){Console.WriteLine("目录: " + directory);TraverseDirectory(directory); // 递归遍历子目录}}
}
5. 文件属性操作

在文件系统操作中,读取和设置文件属性是一个常见需求。C#提供了FileInfo类来实现这一功能。

读取文件属性
using System;
using System.IO;class Program
{static void Main(){string filePath = "example.txt";FileInfo fileInfo = new FileInfo(filePath);if (fileInfo.Exists){Console.WriteLine("文件名: " + fileInfo.Name);Console.WriteLine("文件路径: " + fileInfo.FullName);Console.WriteLine("文件大小: " + fileInfo.Length);Console.WriteLine("创建时间: " + fileInfo.CreationTime);Console.WriteLine("最后访问时间: " + fileInfo.LastAccessTime);Console.WriteLine("最后修改时间: " + fileInfo.LastWriteTime);}else{Console.WriteLine("文件不存在。");}}
}
设置文件属性
using System;
using System.IO;class Program
{static void Main(){string filePath = "example.txt";FileInfo fileInfo = new FileInfo(filePath);if (fileInfo.Exists){// 设置文件属性fileInfo.Attributes = FileAttributes.ReadOnly;Console.WriteLine("文件属性已设置为只读。");// 恢复文件属性fileInfo.Attributes = FileAttributes.Normal;Console.WriteLine("文件属性已恢复为正常。");}else{Console.WriteLine("文件不存在。");}}
}
6. 异步文件I/O操作

在处理大文件或进行耗时的文件操作时,使用异步方法可以提高应用程序的响应性。C#提供了异步方法来进行文件的读写操作。

异步写入文件
using System;
using System.IO;
using System.Threading.Tasks;class Program
{static async Task Main(){string path = "async_example.txt";string content = "这是一个异步写入示例。";await File.WriteAllTextAsync(path, content);Console.WriteLine("文件异步写入成功。");}
}
异步读取文件
using System;
using System.IO;
using System.Threading.Tasks;class Program
{static async Task Main(){string path = "async_example.txt";if (File.Exists(path)){string content = await File.ReadAllTextAsync(path);Console.WriteLine("文件内容:");Console.WriteLine(content);}else{Console.WriteLine("文件不存在。");}}
}
7. 文件监视

C#提供了FileSystemWatcher类,用于监视指定目录中的文件或目录的更改。这在需要对文件系统变化做出响应的应用程序中非常有用。

使用FileSystemWatcher监视文件变化
using System;
using System.IO;class Program
{static void Main(){string path = "example_directory";if (!Directory.Exists(path)){Directory.CreateDirectory(path);}FileSystemWatcher watcher = new FileSystemWatcher();watcher.Path = path;watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.Size;watcher.Filter = "*.*";watcher.Changed += OnChanged;watcher.Created += OnChanged;watcher.Deleted += OnChanged;watcher.Renamed += OnRenamed;watcher.EnableRaisingEvents = true;Console.WriteLine("正在监视目录: " + path);Console.WriteLine("按任意键退出...");Console.ReadKey();}private static void OnChanged(object source, FileSystemEventArgs e){Console.WriteLine($"文件: {e.FullPath} {e.ChangeType}");}private static void OnRenamed(object source, RenamedEventArgs e){Console.WriteLine($"文件: {e.OldFullPath} 重命名为 {e.FullPath}");}
}

希望这些内容对你有所帮助,感谢阅读!

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

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

相关文章

进程的概念

一.进程和程序的理解 首先抛出结论:进程是动态的,暂时存在于内存中,进程是程序的一次执行,而进程总是对应至少一个特定的程序。 程序是静态的,永久的存在于磁盘中。 程序是什么呢?程序其实就是存放在我们…

图像分类-数据驱动方法

K近邻算法(K-Nearest Neighbors,简称KNN) KNN算法通过比较新样本与训练集中的样本的距离,然后根据最近的K个邻居的投票结果来决定新样本的分类。 如图所示,K越大的边界会更加平滑,本质上是根据某一样本最近…

红薯小眼睛接口分析与Python脚本实现

文章目录 1. 写在前面2. 接口分析3. 算法脚本实现 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Py…

04.27 - 05.18_111期_Linux_进程间通信

命名管道通信 特点,写端在没有往管道里面写内容时,读端会处于阻塞状态 共享内存 特点,读端在什么时候都可以进行读操作 ,拷贝次数少,通信次数快 makefile 中使用g进行编译 要实现将上述两个特点进行融合&#xff…

Microsoft Copilot Studio:定制 AI 解决方案的未来

微软最近为其生成式 AI 和大型语言模型工具套件添加了一项创新功能,即 Copilot Studio。这款新产品在 Microsoft Ignite 2023 大会上亮相,将彻底改变组织与 AI 助手的互动方式。 为每个用户提供定制能力 Copilot Studio 是一款出色的用户友好型平台&am…

【面试题】Reactor模型

Reactor模型 定义 Reactor模型是一种事件驱动的设计模式,用于处理服务请求。它通过将事件处理逻辑与事件分发机制解耦,实现高性能、可扩展的并发处理。Reactor模型适用于高并发、事件驱动的程序设计,如网络服务器等。 特点 事件驱动&#…

递归(三)—— 初识暴力递归之“字符串的全部子序列”

题目1 : 打印一个字符串的全部子序列 题目分析: 解法1:非递归方法 我们通过一个实例来理解题意,假设字符串str “abc”,那么它的子序列都有那些呢?" ", “a”, “b”,…

Vue的民族民俗文化分享平台-计算机毕业设计源码22552

基于Vue的民族民俗文化分享平台设计与实现 摘 要 本文介绍了一种基于Vue.js前端框架和Express后端框架的民族民俗文化分享平台的设计和实现。该平台旨在通过线上方式,促进民族民俗文化的传播与分享,增强公众对多元文化的了解和认同。 平台为普通用户提供…

图论·题解1

原题地址 P3371 【模板】单源最短路径(标准版) 注意的点: 边有重复,选择最小边!对于SPFA算法容易出现重大BUG,没有负权值的边时不要使用!!! 70分代码 朴素板dijsktra…

前后端的导入、导出、模板下载等写法

导入,导出、模板下载等的前后端写法 文章目录 导入,导出、模板下载等的前后端写法一、导入实现1.1 后端的导入1.2 前端的导入 二、基础的模板下载2.1 后端的模板下载-若依基础版本2.2 前端的模板下载2.3 后端的模板下载 - 基于资源文件读取2.4 excel制作…

JVM8为什么要增加元空间 ?

持久代 持久代的大小 为什么移除持久代 ? 元空间 元空间的特点: 持久代 持久代中包含了虚拟机中所有可通过反射获取到的数据,比如Class和Method对象。不同的Java虚拟机之间可能会进行类共享,因此持久代又分为只读区和读写区。…

24西安电子科技大学马克思主义学院—考研录取情况

01、马克思主义学院各个方向 02、24马克思主义学院近三年复试分数线对比 PS:马院24年院线相对于23年院线增加15分,反映了大家对于马克思主义理论学习与研究的热情高涨,也彰显了学院在人才培养、学科建设及学术研究等方面的不断进步与成就。 6…

直接更新flowable数据库的流程定义信息的一种方法

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

文章解读与仿真程序复现思路——太阳能学报EI\CSCD\北大核心《绿电交易场景下计及温控负荷的高铁站两阶段调度策略》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【第21章】MyBatis-Plus多数据源支持

文章目录 前言一、dynamic-datasource1. 特性2. 约定3. 使用方法3.1 引入依赖3.2 配置数据源3.3 使用 DS 切换数据源 二、mybatis-mate1.特性2.使用方法2.1 配置数据源2.2 使用 Sharding 切换数据源2.3 切换指定数据库节点 三、实战1. 引入库2. 配置3. 使用 DS 切换数据源4. 测…

开关电源详解

一、开关电源的概述 1. 定义与简介 开关电源(Switched-Mode Power Supply,SMPS)是一种通过高频开关器件(如晶体管、MOSFET)进行电能转换的电源装置。与传统的线性电源相比,开关电源具有转换效率高、体积小…

vue项目打包部署后 浏览器自动清除缓存问题(解决方法)

vue打包部署后 浏览器缓存问题,导致控制台报错ChunkLoadError: Loading chunk failed的解决方案 一、报错如下: 每次build打包部署到服务器上时,偶尔会出现前端资源文件不能及时更新到最新,浏览器存在缓存问题,这时在…

Pandas数据可视化详解:大案例解析(第27天)

系列文章目录 Pandas数据可视化解决不显示中文和负号问题matplotlib数据可视化seaborn数据可视化pyecharts数据可视化优衣库数据分析案例 文章目录 系列文章目录前言1. Pandas数据可视化1.1 案例解析:代码实现 2. 解决不显示中文和负号问题3. matplotlib数据可视化…

ListBox自动滚动并限制显示条数

1、实现功能 限制ListBox显示的最大条数; ListBox自动滚动,显示最新行; 2、C#代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using Syst…

JUC并发编程基础(包含线程概念,状态等具体实现)

一.JUC并发编程基础 1. 并行与并发 1.1 并发: 是在同一实体上的多个事件是在一台处理器上"同时处理多个任务"同一时刻,其实是只有一个事件在发生. 即多个线程抢占同一个资源. 1.2 并行 是在不同实体上的多个事件是在多台处理器上同时处理多个任务同一时刻,大家…