震惊!竟然有人把.NET文件、目录I/O操作总结这么全面

CAD文件转换避坑指南:Inventor导出STP时这些设置千万别忽略 本文深入解析了使用Autodesk Inventor导出STP文件时的关键设置与避坑指南。重点探讨了应用协议选择、样条曲线拟合精度对几何保真度的影响,以及装配体结构和元数据的保全策略,旨在帮助用户实现高质量、零误差的CAD数据交付,避免下游软件打开时出现特征丢失或曲面破碎等问题。 阅读详情

在这里插入图片描述

🏆作者:科技、互联网行业优质创作者
🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造
🏆欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你快速成长。升职+涨薪!!

【目录】
1.文件和目录的创建与删除
2.文件读写操作
3.文件复制和移动
4.文件信息和属性
5.目录遍历
​6.异常处理
7.文件存在性检查
8.路径操作
9.异步文件读写
10. 特殊文件夹路径获取
11.文件属性设置
12.文件锁定检查(赞)
13.文件流操
14.监视文件变化(赞)
15.文件内容比较
16.文件压缩与解压缩
17.文件路径规范化
18.使用MemoryMappedFile进行内存映射文件操作
19.文件流异步操作
20.使用TransactionScope进行文件事务操作(赞)

前言

本文将介绍C#处理文件的知识点,在.NET开发领域,文件系统I/O是一个至关重要的主题,尤其是在处理文件、目录和数据存储方面。

C#作为.NET平台的主要编程语言,提供了丰富而强大的文件系统I/O功能,为开发人员提供了灵活的工具,使其能够高效地处理文件操作。本文将介绍C#处理文件系统I/O知识点。

1、文件和目录的创建与删除

在C#中,使用File和Directory类可以轻松地创建和删除文件及目录。开发者应了解如何使用这两个类的方法。

案例如下:

// 创建文件
File.Create("path/to/file.txt");
// 删除文件
File.Delete("path/to/file.txt");
// 创建目录
Directory.CreateDirectory("path/to/directory");

// 删除目录
Directory.Delete("path/to/directory", true); // 第二个参数表示是否递归删除子目录和文件

2、文件读写操作
C#提供了强大的文件读写功能,开发者需要熟悉StreamReader和StreamWriter等类,以实现对文件的读写操作。

下面是一个简单的例子:

// 读取文件内容
using (StreamReader reader = new StreamReader("path/to/file.txt"))
{
    string content = reader.ReadToEnd();
    Console.WriteLine(content);
}

// 写入文件内容
using (StreamWriter writer = new StreamWriter("path/to/file.txt"))
{
    writer.WriteLine("Hello, C# File I/O!");
}

3、文件复制和移动
在处理文件时,复制和移动是常见的操作。C#提供了File.Copy和File.Move等方法,可以轻松实现文件的复制和移动:

// 复制文件
File.Copy("source/path/file.txt", "destination/path/file.txt");

// 移动文件
File.Move("old/path/file.txt", "new/path/file.txt");

4、文件信息和属性
使用FileInfo类可以获取文件的详细信息和属性,例如文件大小、创建时间等:

FileInfo fileInfo = new FileInfo("path/to/file.txt");
Console.WriteLine($"File Size: {fileInfo.Length} bytes");
Console.WriteLine($"Creation Time: {fileInfo.CreationTime}");

5、目录遍历
了解如何遍历目录以获取文件列表是一个重要的技能。Directory类提供了GetFiles`和GetDirectories方法,可以返回指定目录下的文件和子目录。

案例如下:

// 获取所有文件
string[] files = Directory.GetFiles("path/to/directory");

// 获取所有子目录
string[] directories = Directory.GetDirectories("path/to/directory");

6、异常处理
在进行文件系统I/O操作时,处理可能发生的异常是不可或缺的。可能的异常包括文件不存在、权限不足等。使用try-catch块来捕获这些异常,以确保应用程序的稳定性。

try
{
    // 文件操作代码
}
catch (IOException ex)
{
    Console.WriteLine($"An IO exception occurred: {ex.Message}");
}
catch (UnauthorizedAccessException ex)
{
    Console.WriteLine($"Unauthorized access: {ex.Message}");
}

7、文件存在性检查
在C#可以使用File.Exists方法检查文件是否存在。

if (File.Exists("path/to/file.txt")){// 文件存在,执行相应操作}

8、路径操作
路径对于读取自定义配置文件等有非常重要的作用。在C#可以使用Path类来进行路径的合并、获取文件名等操作。

codestring fullPath = Path.Combine("folder", "subfolder", "file.txt");
string fileName = Path.GetFileName(fullPath);

9、异步文件读写
可以利用C#中的StreamReader和StreamWriter的异步方法,实现异步文件读写操作。

// 异步读取文件
using (StreamReader reader = new StreamReader("path/to/file.txt"))
{    
string content = await reader.ReadToEndAsync();    
Console.WriteLine(content);
}
// 异步写入文件
using (StreamWriter writer = new StreamWriter("path/to/file.txt"))
{    
await writer.WriteLineAsync("Hello, C# File I/O!");
}

10、 特殊文件夹路径获取
可以使用Environment.SpecialFolder枚举和Environment.GetFolderPath方法获取特殊文件夹的路径。下面案例是获取桌面文件路径。

string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
Console.WriteLine($"Desktop Path: {desktopPath}");

11、文件属性设置
使用File.SetAttributes方法设置文件属性,例如将文件设置为只读等。案例如下:

File.SetAttributes("path/to/file.txt", FileAttributes.ReadOnly);

12、文件锁定检查
大家常常会遇到文件锁定的问题不能读写文件,在C#中可以用以下方法检查文件是否被其他进程锁定。

private static bool IsFileLocked(string filePath)
{
    try
    {
        using (FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
        {           
         // 文件未被锁定
         return false;     
        }    
    }    
    catch (IOException)    
    {        
         // 文件被锁定        
         return true; 
    }
}
//调用bool isFileLocked = IsFileLocked("path/to/file.txt");
 //当然还有其它方法,见文章:《C#判断文件是否占用的2种方法》

13、文件流操
使用FileStream进行文件流操作,例如读取和写入文件。

using (FileStream fs = new FileStream("path/to/file.txt", FileMode.Open, FileAccess.Read))
{    
// 执行文件流操作
}

14、监视文件变化
在C#中可以使用FileSystemWatcher类监视文件变化,例如文件内容的修改。

FileSystemWatcher watcher = new FileSystemWatcher("path/to/directory");
watcher.EnableRaisingEvents = true;
watcher.Changed += (sender, e) => Console.WriteLine($"File {e.FullPath} changed");

15、文件内容比较
怎么比较两个文件呢?可以使用File.ReadAllBytes方法转换成字节,然后用SequenceEqual方法来比较两个文件是否相同。案例如下:

private static bool FileEquals(string filePath1, string filePath2) 
{ 
    byte[] file1 = File.ReadAllBytes(filePath1); 
    byte[] file2 = File.ReadAllBytes(filePath2); return file1.SequenceEqual(file2); 
}
//调用bool areFilesEqual = FileEquals("file1.txt", "file2.txt");

16、文件压缩与解压缩
在c#中可以使用ZipFile类进行文件压缩和解压缩操作,目前官方只支持zip文件。案例如下:

ZipFile.CreateFromDirectory("source/path", "archive.zip");ZipFile.ExtractToDirectory("archive.zip", "destination/path");

17、文件路径规范化(文件路径)
使用Path.GetFullPath方法规范化文件路径,解析相对路径等。在项目中可以获取完整路径。

string normalizedPath = Path.GetFullPath("path/to/../file.txt");

18、使用MemoryMappedFile进行内存映射文件操作
利用MemoryMappedFile进行大文件的内存映射操作,提高文件读写性能。

using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile("path/to/file.txt"))
{    
   // 执行内存映射文件操作
}

19、文件流异步操作
使用FileStream的异步方法进行文件流的异步读写操作。

using (FileStream fs = new FileStream("path/to/file.txt", FileMode.Open, FileAccess.Read))
{
    byte[] buffer = new byte[1024]; int bytesRead = await fs.ReadAsync(buffer, 0, buffer.Length);    // 处理读取的数据
}

20、使用TransactionScope进行文件事务操作
使用TransactionScope进行多个文件操作的事务管理,确保一组文件操作要么全部成功,要么全部失败。

using (TransactionScope scope = new TransactionScope())
{
    File.Move("old/path/file.txt", "new/path/file.txt");
    // 其他事务操作
    scope.Complete();
}

结语
掌握这些C#文件系统I/O知识点对于.NET开发者来说是至关重要的。通过灵活运用这些知识,开发者能够更加高效地处理文件和目录,确保应用程序的可靠性和性能。在日常开发中,不断深入学习和实践这些知识,将有助于提高开发者的文件系统操作技能。

希望本文提供的C#文件系统I/O对每个.NET开发者都有所帮助,对于C#文件系统I/O你还知道哪些?欢迎留言讨论或者吐槽本文。

欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你快速成长。升职+涨薪!!
你也可以加入我们(添加微信:894988403,备注“进群”),向大佬学习、探行业内幕、享时代机遇。
【获取更多技术资源,请点击下方卡片】

  • 若文章对你有用,记得转发/分享
  • 若文章对你有用,记得转发/分享
Comsol 压电换能器声场仿真(远场分析、边界元法优化) 本文详细介绍了在Comsol中使用边界元法进行压电换能器远场声场仿真的高效方法。针对传统有限元法计算远场时内存消耗大、耗时长的问题,文章阐述了边界元法在处理无限域、提升计算效率和精确获取远场指向性方面的核心优势,并提供了从多物理场耦合设置、网格划分策略到求解器配置及结果验证的完整实战指南。 阅读详情

相关推荐

震惊C#真的比Java慢?CLR与JVM“对象生死簿”深度解剖:99%程序员被谣言割韭菜!

本文针对编程语言性能焦虑症,通过实测数据对比C#与Java在不同场景下的表现。核心观点:性能优劣取决于具体场景而非语言本身。.NET在值操作和数组遍历占优,而Java在虚方法调用和GC暂停控制更佳。文章揭露常见测试误区(如忽略JIT预热、混淆Debug/Release模式),并提供五大优化神技:对象池复用、Span内存操作、避免装箱、JIT提示和值型应用。实测数据显示,C#对象创建快17%,但Java的ZGC暂停仅0.8ms。最终结论:语言选择应匹配业务场景,两者各有胜负,不存在绝对优劣。

墨夶的博客 623

.NET程序配置文件

配置文件是标准的XML文件,可以用来更改应用程序的设置和设置策略。.NET框架的配置模式由元素组成,你可以在配置文件中使用这些元素来控制应用程序的行为表现。本节的内容表将反映了启动、运行时、网络和其它型配置设置项的架构层次结构。那什么是配置文件的架构呢?说一说我的理解,首先.NET平台下可以开发各种型的程序(Web的、桌面的、移动端的等等)。在这些不同型程序的工程中,用到的配置文件在内容和组织形式上有所不同。那每种工程更适合怎样的内容/形式的配置文件呢?............

三千幻想乡 2574

Windows Forms中的.NET文件操作实践

本文还有配套的精品资源,点击获取 简介:本文深入探讨.NET框架下的文件操作,特别是结合Windows Forms(Winform)应用开发的实际场景。通过介绍System.IO命名空间中的File、FileInfo、Directory和DirectoryInfo,详细解释了如何使用这些进行文件目录的读取、写入、创建、删除和移动操作。文章还讨论了如何在Winform中...

weixin_33205138的博客 968

C# .Net 文件 IO 操作详细教程

System.IO命名空间中主要包含了三个:System.IO.File: 该提供了用于创建、复制、删除、移动、打开和关闭文件的方法。System.IO.Directory: 该提供了用于创建、删除、移动和枚举目录的方法。System.IO.Path: 该提供了用于获取文件目录路径的方法。

张赐荣的技术博客 1363

.NET开源简洁易用的Windows文件管理器

前言今天给大家推荐一款.NET开源的、简洁、易用的Windows文件管理器:Files。官方项目介绍 Files是一个现代的文件管理器,帮助用户整理他们的文件文件夹。由开源社区构建和维护,Files具有强大的多任务体验、文件标签、深度集成和直观的设计。项目的主要特点包括现代化设计:Files采用直观的用户界面设计,提供清晰、美观的界面,使文件管理变得简单而愉悦。强大的功能:File...

zls365365的博客 564

asp.net/c# 文件资源管理平台

文件共享(主键,文件名称,文件内容,上传时间,上传人)用户(主键,用户名,密码,名称,电话,性别,年龄)管理员(主键,用户名,密码,姓名,电话)

2301_76817904的博客 225

震惊!!!.net 8 文件上传“源”来还可以这么玩!

dotnet 文件上传,“源/IFormFile” 来如此!

ChaITSimpleLove的博客 1651

为什么90%的.NET项目日志设计都失败了?真相令人震惊

掌握C#跨平台调试日志设计秘诀,解决90% .NET项目日志混乱难题。适用于多环境应用监控,通过统一日志接口与结构化输出提升排查效率。支持Windows、Linux、macOS,实现高效、可维护的日志系统。值得收藏

PixelShoal的博客 884

19/7/22 一个由王者荣耀引发的“惨案”(.NET

今天因为某些原因下载王者,结果害我删照片从4000删到2000(心痛+累),硬生生挤出来7G。下载过程巨慢,于是去搜搜王者是怎么开发的(想多吐槽一下),结果发现是用的.NET C#写的,顿时感到震惊(小白无地自容) .NET就是微软用来实现XML,Web Services,SOA(面向服务的体系结构service-oriented architecture)和敏捷性的技术。 接着问题来了,....

weixin_44894336的博客 999

解决Nacos2.4启动报 /logs/access_log.x-x-x-x.log (权限不够)、java.net.UnknownHostException: jmenv.tbsite.net

解决Nacos2.4启动报 /logs/access_log.x-x-x-x.log (权限不够)、java.net.UnknownHostException: jmenv.tbsite.net

码农的艺术 1655

Unix/Linux系统编程核心原理与实践指南

系统编程是开发者与操作系统内核直接交互的技术领域,涉及进程管理、文件I/O、内存操作等核心机制。通过系统调用接口,程序可以访问底层硬件资源,实现高效的资源管理和进程控制。Unix/Linux系统以其透明性和模块化设计著称,遵循'万物皆文件'的哲学,通过文件描述符、信号处理等机制实现系统级功能。在现代计算环境中,这些原理支撑着容器技术、高性能服务器等关键应用。掌握fork()的写时复制、文件描述符共享等机制,能有效解决多进程环境中的竞态条件和性能优化问题,是开发可靠系统软件的基础。

weixin_33901926的博客 288

Mono和.NET Core 从比翼双飞到合体

.NET 开源之路就是 Mono和.NET Core 从比翼双飞到合体:2001年12月-2002年2月。一个新的平台诞生了。与惠普、英特尔和其他公司一起, 创建了 EC...

dotNET跨平台 2011

顶级语句 vs 传统Main:C# 10性能对比实测结果令人震惊

揭秘C# 10顶级语句入口点性能真相!对比传统Main方法在启动速度与代码简洁性上的实测差异,适用于控制台应用开发场景。简化入口逻辑,提升可读性与维护效率,实测结果令人震惊,值得收藏。

GatherLume的博客 407

.NET性能调优】:从IL指令看数组与List<T>的效率差距,第3点让人震惊

深入解析C#数组与List<T>性能对比,通过IL指令分析揭示底层效率差异。涵盖遍历、扩容、内存占用等场景,助你优化.NET应用性能。关键结论第3点出乎意料,值得收藏。

PixelStream的博客 985

震惊!!! docker上搭建MySQL原来可以这么轻松~

本文简单介绍了如何快速、高效地在docker上搭建MySQL,以及用两种方式进行连接测试。 以下是往期回顾: Python常见面试题汇总 GitHub个人博客【其中有详细的LeetCode解题思路及归档】 文章目录基于docker的MySQL搭建及测试1. 下载MySQL并创建容器2. 修改配置文件3. 进入MySQL交互环境4. pymysql测试连接5. PyCharm插件测试连接6. 数据库基础操作及常见命令总结 # 前言 Docker是虚拟化的容器服务,镜像在Docker...

SeeYouEnnis 563

震惊!90%的C#开发者都忽略的JIT预热问题及应对策略

解决C#应用启动性能瓶颈,深入解析JIT预热问题。结合C#性能优化:JIT编译与代码分析,揭示服务器端与高并发场景下的预热策略,通过提前触发编译、方法内联优化提升响应速度。实用技巧值得收藏。

VarPerch的博客 590

elmah_ELMAH:ASP.NET的错误记录模块和处理程序(也包括MVC!)

elmahJoe Lowrance said, er tweeted, it best when he said, 乔·劳伦斯(Joe Lowrance)说,呃,最好说, "the amount of attention ELMAH hasn't got is shocking." “ ELMAH尚未引起的关注令人震惊。”ELMAH is one of those largely unknow...

cunfuteng7334的博客 333

.Net 4.0中找不到JavaScriptSerializer

I cannot seem to find the JavaScriptSerializer object nor the the System.Web.Script.Serialization n

xfxf996的博客 620

netcore开源框架_Mono和.NET Core 从比翼双飞到合体

.NET 开源之路就是 Mono和.NET Core 从比翼双飞到合体:2001年12月-2002年2月。一个新的平台诞生了。与惠普、英特尔和其他公司一起, 创建了 ECMA-335 标准, 该标准定义了支持多种编程语言的公共语言基础结构,C# 和 Visual Basic. Net。 F # 于2007年晚些时候发布, 但今天还有20多种. net 语言。Visual Studio. ...

weixin_39916355的博客 296

ASP.NET MVC之Ajax

一、Ajax的前世今生       我一直觉得google是一家牛逼的公司,为什么这样说呢?《舌尖上的中国》大家都看了,那些美食估计你是百看不厌,但是里边我觉得其实也有这样的一个哲学:关于食材,对于种食材的菜农来讲,可能它的价值就是卖到市场上而已;而对于大厨们来讲,却可以像变魔术一样将不起眼的食材变成美味佳肴。大厨们不拥有食材,但他们却可以恰到好处的搭配使用它们,这就是他们的精明之处。而goog

风雨无阻,执着追求!!! 3259

基于MATLAB的语音识别系统程序源代码+报告PDF(高分项目)

基于MATLAB的语音识别系统程序源代码+报告PDF(高分项目),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。该项目可以直接作为毕设、期末大作业使用,代码都在里面,系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值,项目都经过严格调试,确保可以运行!基于MATLAB的语音识别系统程序源代码+报告PDF(高分项目)基于MATLAB的语音识别系统程序源代码+报告PDF(高分项目)基于MATLAB的语音识别系统程序源代码+报告PDF(高分项目)基于MATLAB的语音识别系统程序源代码+报告PDF(高分项目)基于MATLAB的语音识别系统程序源代码+报告PDF(高分项目)基于MATLAB的语音识别系统程序源代码+报告PDF(高分项目)基于MATLAB的语音识别系统程序源代码+报告PDF(高分项目)基于MATLAB的语音识别系统程序源代码+报告PDF(高分项目)基于MATLAB的语音识别系统程序源代码+报告PDF(高分项目)基于MATLAB的语音识别系统程序源代码+报

上一篇: 99%人不知道的SQL查询,去和你老板展示一下吧
下一篇: C#对文件的压缩+解压,很多场景会用到
数字智慧化基地
博客等级 码龄15年 1694粉丝 · 132原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值