当前位置: 首页 > news >正文

深入理解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}");}
}

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++报错无法访问Private
  • 卷积神经网络(CNN)和循环神经网络(RNN) 的区别与联系
  • 适用于 Windows的 5 个最佳 PDF 转 Word 转换器
  • Python爬取豆瓣电影+数据可视化,爬虫教程!
  • Linux: network: openvswitch: disk 访问速度导致不稳定
  • 【CentOS7.6】yum 报错:Could not retrieve mirrorlist http://mirrorlist.centos.org
  • 基于TCP的在线词典系统(分阶段实现)
  • vs+qt5.0 使用poppler-qt5 操作库获取pdf所有文本输出到txt操作
  • B站大课堂-自动化精品视频(个人存档)
  • 【踩坑】探究PyTorch中创建稀疏矩阵的内存占用过大的问题
  • 只需4500字,带你学习Python中7种基础数据类型!
  • 基于单片机的多功能电子时钟的设计
  • ElasticSearch 如何计算得分及一个不太成熟的使用
  • 集合排序 题目
  • 【C#】委托
  • @jsonView过滤属性
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • JavaScript 一些 DOM 的知识点
  • PaddlePaddle-GitHub的正确打开姿势
  • React 快速上手 - 07 前端路由 react-router
  • SpriteKit 技巧之添加背景图片
  • Vue--数据传输
  • windows-nginx-https-本地配置
  • 给第三方使用接口的 URL 签名实现
  • 容器服务kubernetes弹性伸缩高级用法
  • 使用 QuickBI 搭建酷炫可视化分析
  • 使用putty远程连接linux
  • 系统认识JavaScript正则表达式
  • 智能合约Solidity教程-事件和日志(一)
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • #### go map 底层结构 ####
  • #微信小程序:微信小程序常见的配置传值
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (1)svelte 教程:hello world
  • (9)STL算法之逆转旋转
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (转)visual stdio 书签功能介绍
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net wcf memory gates checking failed
  • .net 生成二级域名
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET中两种OCR方式对比
  • .NET中统一的存储过程调用方法(收藏)
  • .Net组件程序设计之线程、并发管理(一)
  • @hook扩展分析
  • @我的前任是个极品 微博分析