【.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));
    }   
}


目录
相关文章
|
5天前
|
开发框架 前端开发 .NET
asp.net core 使用 AccessControlHelper 控制访问权限
asp.net core 使用 AccessControlHelper 控制访问权限
|
17天前
|
Cloud Native API C#
C#的现代化:.NET Core引领的技术革命
【6月更文挑战第9天】`.NET Core引领C#现代化,实现跨平台革命,提升性能并支持云原生应用。异步编程模型优化体验,统一API简化开发流程。C#应用场景扩展,开发效率提高,技术创新加速,预示其未来在技术领域将持续发挥关键作用。`
29 10
|
22天前
|
存储 网络协议 程序员
【.NET Core】.NET中的流(Stream)
【.NET Core】.NET中的流(Stream)
27 7
|
22天前
|
安全 C#
【.NET Core】深入理解IO - 读取器和编写器
【.NET Core】深入理解IO - 读取器和编写器
29 5
|
21天前
|
前端开发 Java C#
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
|
21天前
|
XML 开发框架 人工智能
C#/.NET/.NET Core拾遗补漏合集(24年5月更新)
C#/.NET/.NET Core拾遗补漏合集(24年5月更新)
|
21天前
|
开发框架 .NET API
ASP.NET Core Web中使用AutoMapper进行对象映射
ASP.NET Core Web中使用AutoMapper进行对象映射
|
1天前
|
存储 自然语言处理 Java
Java-File类与IO流(2)
Java-File类与IO流(2)
6 0
|
1天前
|
存储 Java 测试技术
Java-File类与IO流(1)
Java-File类与IO流(1)
3 0
|
20天前
|
开发框架 .NET Linux
【.NET Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
该文介绍了如何不使用VS2019手动创建ASP.NET Core Blazor项目的Dockerfile并构建Docker镜像。首先,创建名为Dockerfile的文件,并复制提供的Dockerfile内容,该文件指定了基础镜像和工作目录。然后,通过CMD在项目目录下运行`docker build -t 自定义镜像名 .`来生成镜像。最后,使用`docker run`命令启动容器并验证项目运行。此外,文章还提到了将镜像推送到Azure Container Registry (ACR)的步骤。