【.NET Core】深入理解IO之File类

简介: 【.NET Core】深入理解IO之File类

一、概述

C#中操作文件的最基本类就是IO类,里面就定义了很多衍生类和方法给我们对文件进行处理、转换、执行等操作;其中流分为写入流(输入流)和读取流(输出流),输出流用于对文件进行读取流操作,输入流用于对文件进行写入数据;

其中IO流中我们比较常用的类有BinaryReader(从二进制流读取原始数据), BinaryWriter(以二进制格式写入原始数据),BufferedStream(字节流的临时存储), Directory(有助于操作目录结构), DirectoryInfo(用于对目录执行操作),File(有助于处理文件),FileInfo(用于对文件执行操作), FileStream(用于文件中任何位置的读写)。


二、File类

File类提供了创建、复制、删除、移动和打开单一文件的静态方法,并协助创建FileStream对象。


File继承基类Object,使用File类执行典型操作,如复制、删除、移动、重命名、打开和追加到单个文件。还可以使用File类来获取和设置文件特性或DateTime与文件的创建、访问和写入相关的信息。如果要对多个文件进行操作,可以使用Directory.GetFiles与DirectoryInfo.GetFiles。


File许多方法在创建和打开文件时返回其I/O类型。可以使用这些进一步操作文件。


2.1 File.AppendAllLines方法

  • 重载
方法 说明
AppendAllLines(String,IEnumerable) 向一个文件中追加行,然后关闭该文件。 如果指定文件不存在,此方法会创建一个文件,向其中写入指定的行,然后关闭该文件。
AppendAllLines(String,IEnumerable,Encoding) 使用指定的编码向一个文件中追加行,然后关闭该文件。 如果指定文件不存在,此方法会创建一个文件,向其中写入指定的行,然后关闭该文件。
  • 示例
var MarchMondays = from line in File.ReadLines(dataPath)
                           where line.StartsWith("Monday") &&
                           line.Contains("March")
                           select line;
File.AppendAllLines(@"D:\temp\selectedDays.txt", MarchMondays);

2.2 File.AppendAllText方法

  • 重载
方法 说明
AppendAllText(String,String) 打开一个文件,向其中追加指定的字符串,然后关闭该文件。 如果文件不存在,此方法将创建一个文件,将指定的字符串写入文件,然后关闭该文件。
AppendAllText(String,String,Encoding) 使用指定的编码将指定的字符串追加到文件中,如果文件还不存在则创建该文件。
  • 示例
string path = @"d:\temp\MyTest.txt";
string appendText = "This is extra text" + Environment.NewLine;
File.AppendAllText(path, appendText)
  • 注解

sourceFileNamedestFileName 参数可以指定相对或绝对路径信息。 相对路径信息解释为相对于当前工作目录。 此方法不支持参数中的通配符。

原始文件的属性保留在复制的文件中。

2.4 File.Create 方法

创建或截断并覆盖指定路径中的文件。

  • 重载


方法 说明
Create(String) 在指定路径中创建、截断和覆盖文件。
Create(String,Int32) 在指定路径中创建、截断和覆盖文件,并指定缓冲区大小。
Create(String,Int32,FileOptions) 创建或覆盖指定路径中的文件,指定缓冲区大小和一个描述如何创建或覆盖该文件的选项。
  • 示例
string path = @"c:\goyeer\MyTest.txt";
using (FileStream fs = File.Create(path))
{
    byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
    fs.Write(info, 0, info.Length);
}
  • 注解

Create中path参数指定相对或绝对路径信息。相对路径信息解释为相对于当前工作目录。若要获取当前工作目录,使用GetCurrentDirectory。如果指定的文件不存在,则创建该文件;如果它确实存在并且它不是只读,则删除并覆盖内容。默认情况下,向所有用户授予对新文件的完整读/写访问权限。该文件读/写访问权限打开,并且必须先关闭,然后才能由另一个应用程序打开。

2.5 File.Decrypt(String) 方法

使用Encrypt(String)方法解密由当前账号加密的文件。

  • 示例
string FileName = "goyeer_config.cfg";
File.Encrypt(FileName);
Console.WriteLine("Encrypt " + FileName);
File.Decrypt(FileName);
Console.WriteLine("Decrypt " + FileName);
  • 注解

方法 Decrypt需要对正在解密的文件具有独占访问权限,如果另一个进程正在使用该文件,将引发异常。 如果文件未加密, Decrypt 将返回一个非零值,指示成功。


Encrypt方法和 Decrypt方法都使用安装在计算机上的加密服务提供程序 (CSP) ,以及调用方法的进程的文件加密密钥。


当前文件系统的格式必须为 NTFS,并且当前操作系统必须Windows NT或更高版本。

2.6 File.Delete(String) 方法

删除指定的文件

  • 示例
string sourceDir =$"e:/temp/goyeer";
string[] txtList = Directory.GetFiles(sourceDir, "*.txt");
foreach (string path in txtList)
{
    File.Delete(path);
}
  • 注解

指定一个文件名,其中包含参数的任何相对或绝对路径信息 path 。 不能包含通配符。 相对路径信息解释为相对于当前工作目录。如果要删除的文件不存在,则不会引发异常。


2.7 File.Move 方法

将指定文件移到新位置,提供要指定新文件名的选项。

  • 重载
方法 说明
Move(String,String) 将指定文件移到新位置,提供要指定新文件名的选项。
Move(String,String,Boolean) 将指定文件移动到新位置,提供用于指定新文件名和替换目标文件(如果已存在)的选项。
  • 示例
string sourcePath = @"c:\temp\MyTest.txt";
string targetPath = @"c:\temp2\MyTest.txt";
File.Move(sourcePath,targetPath);

2.8 File.Open 方法

打开指定路径上的FileSteam

  • 重载

1717428103628.png

  • 示例
string path = @"c:\goyeer\MyTest.txt";
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.None))
{
    byte[] b = new byte[1024];
    UTF8Encoding temp = new UTF8Encoding(true);
    while (fs.Read(b,0,b.Length) > 0)
    {
       Console.WriteLine(temp.GetString(b));
    }   
}


目录
相关文章
|
1月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
1月前
|
存储 开发框架 JSON
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
|
2月前
|
Java
缓冲流和转换流的使用【 File类+IO流知识回顾③】
这篇文章介绍了Java中缓冲流(BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter)和转换流(InputStreamReader, OutputStreamWriter)的使用,包括它们的构造方法和如何利用它们提高IO操作的效率及处理字符编码问题。
缓冲流和转换流的使用【 File类+IO流知识回顾③】
|
2月前
|
存储 Java 调度
FileInputStream,FileOutputStream 和 FileReader ,FileWriter 类的基本使用【 File类+IO流知识回顾②】
这篇文章回顾了Java中FileInputStream、FileOutputStream、FileReader和FileWriter类的基本使用方法,包括读取和写入文件的操作,以及字符流和字节流的区别和应用场景。
FileInputStream,FileOutputStream 和 FileReader ,FileWriter 类的基本使用【 File类+IO流知识回顾②】
|
2月前
|
Java
File类的基本使用【 File类+IO流知识回顾①】
这篇文章回顾了Java中File类的基本使用,包括创建File对象、获取文件数据信息、判断文件存在与否、创建和删除文件目录,以及遍历文件目录的方法。
File类的基本使用【 File类+IO流知识回顾①】
|
2月前
|
存储 Java
序列化流 ObjectInputStream 和 ObjectOutputStream 的基本使用【 File类+IO流知识回顾④】
这篇文章介绍了Java中ObjectInputStream和ObjectOutputStream类的基本使用,这两个类用于实现对象的序列化和反序列化。文章解释了序列化的概念、如何通过实现Serializable接口来实现序列化,以及如何使用transient关键字标记不需要序列化的属性。接着,通过示例代码演示了如何使用ObjectOutputStream进行对象的序列化和ObjectInputStream进行反序列化。
序列化流 ObjectInputStream 和 ObjectOutputStream 的基本使用【 File类+IO流知识回顾④】
|
21天前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
|
2月前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
2月前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
92 3
|
1月前
|
开发框架 JavaScript 前端开发
一个适用于 ASP.NET Core 的轻量级插件框架
一个适用于 ASP.NET Core 的轻量级插件框架