首页 > 编程语言 >每个.NET开发都应掌握的C#处理文件系统I/O知识点

每个.NET开发都应掌握的C#处理文件系统I/O知识点

时间:2023-12-05 14:33:36浏览次数:39  
标签:知识点 File 文件 C# file path NET txt

上篇文章讲述了C#多线程知识点,本文将介绍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#中的StreamReaderStreamWriter的异步方法,实现异步文件读写操作。

// 异步读取文件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你还知道哪些?欢迎留言讨论或者吐槽本文。

参考:

1、微软官网:learn.microsoft.com/zh-cn/dotnet/api/system.io.file

2、AI查询

1、每个.NET开发都应掌握的C#多线程知识点

2、每个.NET开发都应掌握的C#特性(Attribute)知识点

3、每个.NET开发都应掌握的C#反射知识点

4、每个.NET开发都应掌握的C#异常处理知识点

5、每个.NET开发都应掌握的C#集合知识点

6、每个.NET开发都应掌握的C#委托事件知识点

7、每个.NET开发都应掌握的C#接口知识点

8、每个.NET开发都应掌握的linq知识点

9、每个.NET开发都应掌握C#泛型的几个知识点

10、每个.NET开发都应该知道的10个.NET库

来源公众号:DotNet开发跳槽

标签:知识点,File,文件,C#,file,path,NET,txt
From: https://www.cnblogs.com/xbhp/p/17876959.html

相关文章

  • 【DevEco Studio】报错Error: spawn cmd.exe ENOENT怎么解决?
    【关键字】hvigor报错、Error:spawncmd.exeENOENT【问题背景】编译的时候报Error:spawncmd.exeENOENT该怎么解决?预览的时候报Error:spawncmd.exeENOENT该怎么解决?具体报错截图如下:【解决方案】这种是环境变量缺少了C:\Windows\System32导致的,在Path里面新建一个把值复制进......
  • Highcharts 3D漏斗图和3D金字塔图​
    需求Highcharts中的3D漏斗图和3D金字塔图可以用来展示数据的层级关系或者比例关系。漏斗图通常用来表示销售过程中各个阶段的转化率,如潜在客户、意向客户、成交客户等;金字塔图通常用来表示一种由大到小或者由小到大的层级关系,比如人口统计数据中的年龄结构、组织结构中的岗位层级等......
  • oracle通配符大全
    用于where比较条件的有:等于:=、<、<=、>、>=、<>>,<:大于,小于>=.<=:大于等于,小于等于=:等于!=,<>,^=:不等于包含:in、notinexists、notexists范围:between...and、notbetween....and匹配测试:like、notlikeNull测试:isnull、isnotnull布尔链接:and、or、notOracle通......
  • Unity底层是如何处理C#的
    在面试中,我们经常会被问到Unity的底层是如何处理C#,本节给通过一下3个点来给大家详细的分析这个问题:(1)C#的发展历史;(2)Unity为什么用C#;(3)il2cpp解决了什么问题;对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀C#的发展历史C#没有出来之前......
  • 将Web Site Project升级到Web Application Project
    此处仅以VB作为编程语言的项目和VisualStudio开发环境为例:新建一个空的WebApplication项目(VB)将旧的项目文件全部复制到新的空白项目中。App_Code文件夹需要改名,不能继续叫App_Code了,可以改成其他名字。右键项目属性,确定一下项目命名空间,此处以WebApplication1做例子。......
  • 明年个人电脑将迎来大爆发!Windows 12、AI PC带来近年最强换机潮
    经历多年萎靡之后,PC有望在明年迎来触底反弹,Windows更新周期加上AIPC的崛起,将带来近年最强换机潮。全球知名科技市场独立分析机构Canalys发布的研报指出,全球个人电脑出货量在连续七个季度下跌后有望迎来复苏。在节日旺季和宏观经济改善的推动下,预计2023年第四季度市场将增长5%。......
  • Kiractf
    信息收集主机发现和端口扫描只开放了80的web服务​​‍WEB打点访问首页有文件上传,肯定可以利用一波。language那个页面甚至文件包含都写脸上了。root@Locklytmp/kiractf»curlhttp://192.168.56.112<inputtype="submit"value="upload"onclick="windo......
  • Exercises
    To:TeamMembersSubject:NewYearPartyPlanningDate:[SpecifythedatefortheNewYearparty]Time:[Specifythestartandendtimeoftheevent]Venue:[Specifythelocationorvenuefortheparty]Assignments:1.DecorationCommittee:[Name1],[Name2]......
  • 【Python/数据库】SQLAlchemy基础操作
    一、SQLAlchemy——创建表#ORM#1.Class-Obj#2.创建数据库引擎#3.将所有的Class序列化为数据表#4.ORM操作-CRUD(增删改查操作的简称)1.创建一个class#create_table.pyfromsqlalchemy.ext.declarativeimportdeclarative_baseBase=declarative_base......
  • 【Python/数据库】SQLAlchemy一对多,多对多操作
    SQLAlchemy一对多操作1.创建多表#create_table_ForeginKey.pyfromsqlalchemy.ext.declarativeimportdeclarative_basefromsalalchemyimportColumn,INT,VARCHAR,ForeignKeyfromsqlalchemyimportcreate_engineBase=declarative_base()classStudent(Base)......