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

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

文章目录

  • 【.NET Core】深入理解IO之File类
    • 一、概述
    • 二、File类
      • 2.1 File.AppendAllLines方法
      • 2.2 File.AppendAllText方法
      • 2.3 File.Copy 方法
      • 2.4 File.Create 方法
      • 2.5 File.Decrypt(String) 方法
      • 2.6 File.Delete(String) 方法
      • 2.7 File.Move 方法
      • 2.8 File.Open 方法

在这里插入图片描述

一、概述

C#中操作文件的最基本类就是IO类,里面就定义了很多衍生类和方法给我们对文件进行处理、转换、执行等操作;其中流分为写入流(输入流)和读取流(输出流),输出流用于对文件进行读取流操作,输入流用于对文件进行写入数据;
其中IO流中我们比较常用的类有BinaryReader(从二进制流读取原始数据), BinaryWriter(以二进制格式写入原始数据),BufferedStream(字节流的临时存储), Directory(有助于操作目录结构), DirectoryInfo(用于对目录执行操作),File(有助于处理文件),FileInfo(用于对文件执行操作), FileStream(用于文件中任何位置的读写)。

文章:【.Net Core】深入理解IO之文件和目录介绍了Directory使用,本文将介绍FileFileInfo的使用。

二、File类

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

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

2.3 File.Copy 方法

将现有文件复制到新文件。

  • 重载
方法说明
Copy(String,String,Boolean)将现有文件复制到新文件。 允许覆盖同名的文件,True覆盖
Copy(String,String)将现有文件复制到新文件。 不允许覆盖同名的文件。
  • 示例
string sourceDir = @"e:\current";
string backupDir = @"e:\goyeer\2024";
 string[] txtList = Directory.GetFiles(sourceDir, "*.txt");
 foreach (string f in txtList)
 {
     string fName = f.Substring(sourceDir.Length + 1);
     File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName));
 }
  • 注解

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);
}
  • 注解

Createpath参数指定相对或绝对路径信息。相对路径信息解释为相对于当前工作目录。若要获取当前工作目录,使用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

  • 重载
方法说明
Open(String,FileMode,FileAccess,FileShare)打开指定路径上的 FileStream,具有带读、写或读/写访问的指定模式和指定的共享选项。
Open(String,FileMode)通过不共享的读/写访问权限打开指定路径上的FileStream
Open(String,FileMode,FileStreamOptions)使用指定的路径、创建模式、读/写和共享权限、其他 FileStreams 对同一文件的访问权限、缓冲区大小、其他文件选项和分配大小初始化 类的新实例FileStream
Open(String,FileMode,FileAccess)通过指定的模式和不共享的访问权限打开指定路径上的FileStream
  • 示例
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));
    }   
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/413643.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx+Tomcat实现动静分离

文章目录 一.动静分离的原理及架构1.1 动静分离是什么?1.2 动静分离的原理1.3 动静分离的架构组成 二.NginxTomcat实现动静分离2.1实验环境2.2所需软件环境2.3nginx服务的实现2.4配置动静分离 一.动静分离的原理及架构 1.1 动静分离是什么? 动静分离(S…

Android 15的新功能介绍

虽然谷歌已经发布了 Android 15 Preview 1,但这并不是完整的更新,因为该公司计划在后续的每月测试版中引入新功能。但这可能会让您思考,“Android 15 带来了哪些新功能?” 为了寻找答案,让我们深入了解 Android 15。 …

pr2024 Premiere Pro 2024 mac v24.2.1中文激活版

Premiere Pro 2024 for Mac是Adobe公司推出的一款强大的视频编辑软件,专为Mac操作系统优化。它提供了丰富的剪辑工具、特效和音频处理选项,帮助用户轻松创建专业级的影视作品。 软件下载:pr2024 Premiere Pro 2024 mac v24.2.1中文激活版 无论…

Linux yum安装pgsql出现Bad GPG signature错误

官方文档:https://www.postgresql.org/download/linux/redhat/ sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql12-server sudo /usr/pgsql-12/bin/…

【架构笔记1】剃刀思维-如无必要,勿增实体

欢迎来到文思源想的架构空间,前段时间博主做了一个工作经历复盘,10年开发路,走了不少弯路,也算积累了不少软件开发、架构设计的经验和心得,确实有必要好好盘一盘,作为个人的总结,同时也留给有缘…

【QT+QGIS跨平台编译】之五十四:【QGIS_CORE跨平台编译】—【qgssqlstatementlexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…

leetcode:134.加油站

解题思路:需要注意开始时的编号,有的可以走一圈,有的走不了 模拟过程:for循环主要是用来模拟线性的过程,而在这里它是环状的; 可以用暴力解法,但是在这里我用贪心来解决。 常见疑惑&#xff1…

阿里云国际云解析DNS如何开启/关闭流量分析?

流量分析服务会涉及产生日志费用,所以开通内网DNS解析服务后,默认不会主动开启流量分析,需要您手动开启流量分析。对于未开启流量分析的用户,进入界面会提示您展示的都是模拟数据,您可以点击开启流量分析服务&#xff…

nvm下载node指定版本后npm不存在

一,项目背景 接手一个老的项目,需要使用旧的node版本,使用nvm下载12.11.0版本后发现npm命令不存在。 二,原因 查找资料发现是8.11以上版本的node版本对应的npm都没法自动安装,需要自己到npm官网( https://registry.…

《TCP/IP详解 卷一》第9章 广播和本地组播

目录 9.1 引言 9.2 广播 9.2.1 使用广播地址 9.2.2 发送广播数据报 9.3 组播 9.3.1 将组播IP地址转换为组播MAC地址 9.3.2 例子 9.3.3 发送组播数据报 9.3.4 接收组播数据报 9.3.5 主机地址过滤 9.4 IGMP协议和MLD协议 9.4.1 组成员的IGMP和MLD处理 9.4.2 组播路由…

Linux--查看网络性能指标

一、性能指标有哪些? 带宽,表示链路的最大传输速率,单位是 b/s (比特 / 秒),带宽越大,其传输能力就越强。延时,表示请求数据包发送后,收到对端响应,所需要的…

【iOS ARKit】网络传输 ARWorldMap

ARKit 可以利用 ARWorldMap 在应用中断后进行状态恢复、继续AR 进程。一个用户也可以将ARWorldMap 发送给其他用户,当其他用户接收并加载 ARWorldMap 后,就可以在相同的物理环境看到同样的虚拟元素,达到共享 AR体验的目的。 在ARKit 中&#…

【c语言】内存函数

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 memcpy函数的使用和模拟实现 memcpy函数的使用 memcpy函数的模拟实现 memmove的使用和模拟实现 memmove的使用 memmove的模拟实现 memset函数的使用 memcmp函数…

java中容器继承体系

首先上图 源码解析 打开Collection接口源码&#xff0c;能够看到Collection接口是继承了Iterable接口。 public interface Collection<E> extends Iterable<E> { /** * ...... */ } 以下是Iterable接口源码及注释 /** * Implementing this inte…

【UE 材质】水晶材质

效果 步骤 1. 先在Quixel Bridge上下载冰纹理 2. 新建一个材质&#xff0c;这里命名为“M_Ice”并打开&#xff0c;添加如下纹理采样节点 继续添加如下节点 此时效果如下&#xff1a; 可以看到此时的材质颜色比较浅&#xff0c;如果希望颜色深一点可以继续添加如下节点 此时效…

Java学习--学生管理系统(残破版)

代码 Main.java import java.util.ArrayList; import java.util.Scanner;public class Main {public static void main(String[] args) {ArrayList<Student> list new ArrayList<>();loop:while (true) {System.out.println("-----欢迎来到阿宝院校学生管理系…

OSI模型

OSI模型 TCP/IP参考模型 TCP/IP常见协议 应用层 FTP&#xff08;用于文件的下载和上传&#xff0c;采用C/S结构&#xff09; Telnet&#xff08;用于远程登陆服务&#xff09; DNS&#xff08;域名解析&#xff09; HTTP&#xff08;接收和发布Html页面&#xff09; 传输层…

React Switch用法及手写Switch实现

问&#xff1a;如果注册的路由特别多&#xff0c;找到一个匹配项以后还会一直往下找&#xff0c;我们想让react找到一个匹配项以后不再继续了&#xff0c;怎么处理&#xff1f;答&#xff1a;<Switch>独特之处在于它只绘制子元素中第一个匹配的路由元素。 如果没有<Sw…

Vue项目构建优化

本文作者为 360 奇舞团前端开发工程师 宁航 在开发大型前端项目时&#xff0c;往往是一个需求对应一个分支&#xff0c;当完成需求后&#xff0c;就需要将代码打包、部署。代码通常需要部署到多个环境中&#xff0c;这些环境包括&#xff1a;日常环境、测试环境、回归环境和生产…

Linux Centos7配置SSH免密登录

Linux Centos7配置SSH免密登录 配置SSH免密登录说明&#xff1a; 分两步 第一步、给Server A生成密钥对 第二步、给Server B授权 生成密钥对之后&#xff0c;我们可以看看它保存的目录下的文件。 接下来我们就要把Server A&#xff08;10.1.1.74&#xff09;的公钥拷贝到Se…