C#文件操作File类vsFileInfo类和Directory类vsDirectoryInfo类

目录

一、File类vsFileInfo类

1.File类

(1)示例源码

(2)生成效果

2.FileInfo类

(1)示例源码

(2)生成效果

二、 Directory类vsDirectoryInfo类

1.Directory类

(1)示例源码

(2)生成效果

2.DirectoryInfo类

(1)示例源码

(2)生成效果


        System.IO命名空间包含允许在数据流和文件中进行同步和异步读取及写入的类型。

        文件和流的差异:文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合提供一种向后备存储写入字节从后备存储读取字节的方式

        System.IO命名空间中的类及说明如表:

说    明

BinaryReader

用特定的编码将基元数据类型读作二进制值

Binary Writer

以二进制形式将基元类型写入流,并支持用特定的编码写入字符串

BufferedStream

给另一流上的读写操作添加一个缓冲层。无法继承此类

Directory

公开用于创建、移动、枚举、删除目录和子目录的静态方法。无法继承此类

DirectoryInfo

公开用于创建、移动和枚举目录和子目录的实例方法。无法继承此类

DriveInfo

提供对有关驱动器的信息的访问

File

提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建FileStream对象

FileInfo

提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建FileStream对象。无法继
承此类

FileStream

公开以文件为主的Stream,既支持同步读写操作,也支持异步读写操作

FileSystemInfo

为FileInfo和DirectoryInfo对象提供基类

FileSystemWatcher

侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件

MemoryStream

创建其支持存储区为内存的流

Path

对包含文件或目录路径信息的String实例执行操作。这些操作是以跨平台的方式执行的

StreamReader

实现一个TextReader,使其以一种特定的编码从字节流中读取字符

StreamWriter

实现一个TextWriter,使其以一种特定的编码向流中写入字符

StringReader

实现从字符串进行读取的TextReader

StringWriter

实现一个用于将信息写入字符串的TextWriter。该信息存储在基础StringBuilder中

TextReader

表示可读取连续字符系列的读取器

TextWriter

表示可以编写一个有序字符系列的编写器。该类为抽象类

一、File类vsFileInfo类

1.File类

        File类和Directory类分别用来对文件和各种目录进行操作,这两个类可以被实例化,但不能被其他类继承。

        File类支持对文件的基本操作,它包括用于创建、复制、删除、移动和打开文件的静态方法,并协助创建FileStream对象。File类中一共包含40多个方法。

  •         由于File类中的所有方法都是静态的,所以如果只想执行一个操作,那么使用File类中方法的效率比使用相应的FileInfo类中的方法可能更高。
  •         File类的静态方法对所有方法都执行安全检查,因此,如果打算多次重用某个对象,可考虑改用FileInfo类中的相应方法,因为并不总是需要安全检查。

        虽然,使用与文件、文件夹及流相关的类时,首先需要添加System.IO命名空间。但.NET 7.0、 .NET 8.0下不需要添加,因为已经被默认支持了。

 方   法说   明
Copy将现有文件复制到新文件
Create在指定路径中创建文件
Delete删除指定的文件。如果指定的文件不存在,则不引发异常
Exists确定指定的文件是否存在
Move将指定文件移到新位置,并提供指定新文件名的选项
Open打开指定路径上的FileStream
CreateText创建或打开一个文件用于写入UTF-8编码的文本
GetCreationTime返回指定文件或目录的创建日期和时间
GetLastAccessTime返回上次访问指定文件或目录的日期和时间
GetLastWriteTime返回上次写入指定文件或目录的日期和时间
OpenRead打开现有文件以进行读取
OpenText打开现有UTF-8编码文本文件以进行读取
OpenWrite打开现有文件以进行写入
ReadAllBytes打开一个文件,将文件的内容读入一个字符串,然后关闭该文件
RcadAllLines打开一个文本文件,将文件的所有行都读入一个字符串数组,然后关闭该文件
ReadAllText打开一个文本文件,将文件的所有行读入一个字符串,然后关闭该文件
Replace使用其他文件的内容替换指定文件的内容,这一过程将删除原始文件,并创建被替换文件的
备份
SetCreationTime设置创建该文件的日期和时间
SetLastAccessTime设置上次访问指定文件的日期和时间
SetLastWriteTime设置上次写入指定文件的日期和时间
WriteAllBytes创建一个新文件,在其中写入指定的字节数组,然后关闭该文件。如果目标文件已存在,则改
写该文件
WriteAllLines创建一个新文件,在其中写入指定的字符串,然后关闭文件。如果目标文件已存在,则改写该
文件
WriteAllText创建一个新文件,在文件中写入内容,然后关闭文件。如果目标文件已存在,则改写该文件

(1)示例源码

// File
namespace _01
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){label1.Text = "文件名:";button1.Text = "创建";label1.AutoSize = true;textBox1.Size = new Size(150, 23);}private void Button1_Click(object sender, EventArgs e){if (textBox1.Text == string.Empty)   //判断输入的文件名是否为空{MessageBox.Show("文件名不能为空!");}else{if (File.Exists(textBox1.Text))       //使用File类的Exists方法判断要创建的文件是否存在{MessageBox.Show("该文件已经存在");}else{File.Create(textBox1.Text);   //使用File类的Create方法创建文件}}}}
}

(2)生成效果

         文件位置:F:\C#_TM\chapter20\01\bin\Debug\net8.0-windows\wenchm.txt

        如果还未生成过,第一次按下按钮则生成文件,再次按下按钮则警示。

 

2.FileInfo类

        使用FileInfo类和DirectoryInfo类可以方便地对文件和文件夹进行操作。

        FileInfo类和File类之间许多方法调用都是相同的,但是FileInfo类没有静态方法,该类中的方法仅可以用于实例化的对象。File类是静态类,所以它的调用需要字符串参数为每一个方法调用规定文件位置。因此如果要在对象上进行单一方法调用,则可以使用静态File类,在这种情况下静态调用速度要快一些,因为.NET框架不必执行实例化新对象并调用其方法的过程。如果要在文件上执行几种操作,则实例化FileInfo对象使用其方法就更好一些。这样会提高效率,因为对象将在文件系统上引用正确的文件,而静态类就必须每次都寻找文件。

        如果想要对某个对象进行重复操作,应使用FileInfo类。

属    性
CreationTime    获取或设置当前 FileSystemInfo 对象的创建时间
Directory    获取父目录的实例
DirectoryName    获取表示目录的完整路径的字符串
    Exist    获取指示文件是否存在的值
Extension    获取表示文件扩展名部分的字符串
FullName    获取目录或文件的完整目录
IsReadOnly    获取或设置确定当前文件是否为只读的值
LastAccessTime    获取或设置上次访问当前文件或目录的时间
LastWriteTime    获取或设置上次写入当前文件或目录的时间
Length    获取当前文件的大小
   Name    获取文件名

(1)示例源码

// FileInfo
namespace _03
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){label1.Text = "文件路径及名称:";button1.Text = "创建";label1.AutoSize = true;textBox1.Size = new Size(190, 23);}private void Button1_Click(object sender, EventArgs e){if (textBox1.Text == string.Empty)  //判断输入的文件名称是否为空{MessageBox.Show("文件名称不能为空!");}else{FileInfo finfo = new(textBox1.Text);if (finfo.Exists)                        //使用FileInfo对象的Exists属性判断要创建的文件是否存在{MessageBox.Show("该文件已经存在");}else{finfo.Create();                 //使用FileInfo对象的Create方法创建文件}}}   }
}

(2)生成效果

        文件及路径:F:\C#_TM\chapter20\03\bin\Debug\net8.0-windows\wenchm.txt

         如果还未生成过,第一次按下按钮则生成文件,再次按下按钮则警示。

二、 Directory类vsDirectoryInfo类

1.Directory类

        Directory类公开了用于创建、移动、枚举、删除目录和子目录的静态方法。在用Directory类对文件夹进行操作时,其文件夹的路径必须正确,否则会触发异常。

方   法说   明
 CreateDirectory 创建指定路径中的所有目录
 Delete 删除指定的目录
 Exists 确定给定路径是否引用磁盘上的现有目录
 GetCreationTime 获取目录的创建日期和时间
 GetDirectories 获取指定目录中子目录的名称
 GetDirectoryRoo 返回指定路径的卷信息、根信息或二者同时返回
 GetFiles 返回指定目录中的文件的名称
 GetFileSystemEntries 返回指定目录中所有文件和子目录的名称
 GetLastAccessTime 返回上次访问指定文件或目录的日期和时间
 GetLastWriteTime 返回上次写入指定文件或目录的日期和时间
 GetParent 检索指定路径的父目录,包括绝对路径和相对路径
 Move 将文件或目录及其内容移到新位置
 SetCreationTime 为指定的文件或目录设置创建日期和时间
 SetCurrentDirectory 将应用程序的当前工作目录设置为指定的目录
 SetLastAccessTime 设置上次访问指定文件或目录的日期和时间
 SetLastWriteTime 设置上次写入目录的日期和时间

(1)示例源码

// Directory
namespace _02
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){label1.Text = "文件夹路径及名称:";button1.Text = "创建";label1.AutoSize = true;textBox1.Size = new Size(210, 23);}private void Button1_Click(object sender, EventArgs e){if (textBox1.Text == string.Empty)                 //判断输入的文件夹名称是否为空{MessageBox.Show("文件夹名称不能为空!");}else{if (Directory.Exists(textBox1.Text))           //使用Directory类的Exists方法判断要创建的文件夹是否存在{MessageBox.Show("该文件夹已经存在");}else{Directory.CreateDirectory(textBox1.Text);  //使用Directory类的CreateDirectory方法创建文件夹}}}}
}

(2)生成效果

         路径:F:\C#_TM\chapter20\02\bin\Debug\net8.0-windows

        如果还未生成过,第一次按下按钮则生成文件,再次按下按钮则警示。

 

2.DirectoryInfo类

        DirectoryInfo类和Directory类之间的关系与FileInfo类和File类之间的关系十分类似。

属   性说   明
CreationTime    获取或设置当前FileSystemlnfo对象的创建时间
Exists    获取指示目录是否存在的值
Extension    获取表示文件扩展名部分的字符串
FullName    获取目录或文件的完整目录
LastAccessTime     获取或设置上次访问当前文件或目录的时间
LastWriteTime     获取或设置上次写入当前文件或目录的时间
    Name    获取Directorylnfo实例的名称
    Parent    获取指定子目录的父目录
    Root    获取路径的根部分

(1)示例源码

// DirectoryInfo
namespace _04
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){label1.Text = "文件夹路径及名称:";button1.Text = "创建";label1.AutoSize = true;textBox1.Size = new Size(210, 23);}private void Button1_Click(object sender, EventArgs e){if (textBox1.Text == string.Empty)   //判断输入的文件夹名称是否为空{MessageBox.Show("文件夹名称不能为空!");}else{DirectoryInfo dinfo = new(textBox1.Text);  //实例化DirectoryInfo类对象if (dinfo.Exists)                //使用DirectoryInfo对象的Exists属性判断要创建的文件夹是否存在{MessageBox.Show("该文件夹已经存在");}else{dinfo.Create();             //使用DirectoryInfo对象的Create方法创建文件夹}}}}
}

(2)生成效果

        路径: F:\C#_TM\chapter20\04\bin\Debug\net8.0-windows

        如果还未生成过,第一次按下按钮则生成文件,再次按下按钮则警示。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FilterChain攻击解析及利用

文章目录 BASE64解码和编码原理浅析EncodingDecoding Filterchain构造(原理阐述)回顾死亡代码特性一(双重去杂)特性二(粘合性) 任意字符构造工具一工具二 实战例题[NSSRound#7 Team]brokenFilterChain&…

运维01:云计算

云计算的类型 分类:公有云、私有云、混合云 云计算的服务模式 服务模式分3种: ①IaaS(Infrastructure as a Service):基础设施即服务 ②PaaS(Platform as a Service):平台即服务…

Java并发编程

一、基础知识 1. 为什么要使用并发编程 提升多核CPU的利用率:一般来说一台主机上的会有多个CPU核心,我们可以创建多个线程,理论上讲操作系统可以将多个线程分配给不同的CPU去执行,每个CPU执行一个线程,这样就提高了CP…

Portraiture2024最新Photoshop磨皮插件更新啦

Portraiture是一款由Imagenomic公司研发的Photoshop磨皮插件。该插件以其优秀的磨皮效果,成为了众多摄影师和化妆师使用的首选插件。Portraiture主要用于影楼、婚纱、时尚摄影等各个领域。其主要特点是能够轻松地模拟人眼的视觉感受,自然地修饰人像照片。…

带头双向循环链表的实现

目录 认识带头双向循环链表 双向链表 循环链表 带头链表 带头双向循环链表 双向链表的优势和不足: 顺序表的优势和不足: 实现带头双向循环链表 创建带头双向循环链表 初始化 创建返回链表的头结点 打印链表 尾插 尾删 头插 头删 查找 在…

java小游戏之【王者荣耀】

首先创建一个新的Java项目命名为“王者荣耀”,并在src下创建两个包分别命名为“com.sxt"、”com.stx.beast",在相应的包中创建所需的类。 代码 package com.sxt;import javax.swing.*; import java.awt.*;public class Background extends GameObject {p…

android shape绘制半圆

<?xml version"1.0" encoding"utf-8"?><shape xmlns:android"http://schemas.android.com/apk/res/android"android:shape"rectangle"><sizeandroid:width"20dp"android:height"10dp" /><…

【全栈开发】RedwoodJS与BlitzJS:全栈JavaScript元框架的未来

Redwood和Blitz是两个即将出现的全栈元框架&#xff0c;它们提供了创建SPAs、服务器端渲染页面和静态生成内容的工具&#xff0c;并提供了生成端到端支架的CLI。我一直在等待一个有价值的Rails JavaScript替代品&#xff0c;谁知道什么时候。这篇文章是对两者的概述&#xff0c…

opencv-利用DeepLabV3+模型进行图像分割去除输入图像的背景

分离图像中的人物和背景通常需要一些先进的图像分割技术。GrabCut是一种常见的方法&#xff0c;但是对于更复杂的场景&#xff0c;可能需要使用深度学习模型。以下是使用深度学习模型&#xff08;如人像分割模型&#xff09;的示例代码&#xff1a; #导入相关的库 import cv2 …

[C++]指针与结构体

标题 一.指针1.指针的定义和使用2.指针所占的内存空间3.空指针与野指针4.const修饰指针5.指针和数组6.指针和函数 二.结构体1.结构体的定义与使用2.结构体数组3.结构体指针4.结构体的嵌套使用5.结构体做函数参数6.结构体中const使用场景7.案例练习 一.指针 作用: 可以通过指针…

FPGA驱动CS4344 VHDL例程

CS4344是一款非常简单的I2S立体声24bit D/A芯片&#xff0c;采样率高达192KHz&#xff0c;相对于ADAU1761复杂的寄存器配置来说&#xff0c;CS4344非常友好&#xff0c;无需配置寄存器&#xff0c;只要按I2S时序输入数据&#xff0c;即可实现立体声输出&#xff0c;且10PIN TSS…

SpringBoot 拦截器高级篇

Springboot 拦截器 定义使用场景拦截器与过滤器的区别实现步骤全局拦截器的局限性全局拦截器VS局部拦截器局部拦截器自定义局部拦截器使用多个局部拦截器 定义 拦截器是Spring MVC框架中的一个重要组件&#xff0c;它是一种AOP&#xff08;面向切面编程&#xff09;的实现方式&…

探索计算机视觉:深度学习与图像识别的融合

探索计算机视觉&#xff1a;深度学习与图像识别的融合 摘 要&#xff1a; 本文将探讨计算机视觉领域中的深度学习技术&#xff0c;并重点关注图像识别方面的应用。我们将介绍卷积神经网络&#xff08;CNN&#xff09;的原理、常用的图像数据集以及图像识别的实际应用场景&…

Leetcode 1727. 具有重排的最大子矩阵

题目要求&#xff1a; 给定一个大小为 m x n 的二进制矩阵&#xff0c;并且允许您以任意顺序重新排列矩阵的列。 对列进行最佳重新排序后&#xff0c;返回矩阵中每个元素都为 1 的最大子矩阵的面积。 输入&#xff1a;矩阵 [[0,0,1],[1,1,1],[1,0,1]] 输出&#xff1a;4 说明…

Java制作“简易王者荣耀”小游戏

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 GameFrame 运行类 package com.sxt;import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; im…

班级管理五步法

亲爱的教师朋友们&#xff01;今天我要和大家分享一个超级实用的班级管理方法——班级管理五步法&#xff01;用这个方法&#xff0c;轻松掌握班级秩序&#xff0c;一起来看看吧&#xff01; 第一步&#xff1a;建立规矩 我们要和孩子们一起建立规矩。规矩要简单明了&#xff…

Go 语言 Printf 函数和格式化动词详解

Printf() 函数可以使用多种格式化动词对输出进行格式化。下面是可以与所有数据类型一起使用的一些通用格式化动词&#xff1a; 通用格式化动词&#xff1a; 以下动词适用于所有数据类型&#xff1a; 动词描述%v以默认格式打印值%#v以 Go 语法格式打印值%T打印值的类型%%打印百…

JAVA小游戏简易版王者荣耀

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 GameFrame 运行类 package com.sxt; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;…

从0到1建立前端规范

本文适合打算建立前端规范的小伙伴阅读 一、为什么需要规范 规范能给我们带来什么好处&#xff0c;如果没有规范会造成什么后果&#xff1f;这里主要拿代码规范来说。 统一代码规范的好处&#xff1a; 提高代码整体的可读性、可维护性、可复用性、可移植性和可靠性&#xf…

Pytorch项目的文件结构一般都是怎么组织的?

如果是从一些比较典型的论文里弄下来的源码&#xff0c;你会发现它们的论文结构往往都非常复杂。不同的模型、不同的论文&#xff0c;可能代码结构组织的方式都不一样。但它们都不外乎就是经历这几个方面&#xff1a; 1、模型和结构模块定义&#xff1b; 2、数据集获取与处理…