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

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

 

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

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

相关文章

C语言基础介绍

1. C语言基础知识 C语言是一种计算机编程语言,是一门用于编写系统软件和应用软件的高级语言。C语言的基础知识包括: 数据类型:C语言中的数据类型包括整型、浮点型、字符型等。 变量:C语言中使用变量来存储数据,变量必…

量化交易:因子风险暴露

本文介绍了如何计算因子风险暴露的内容。 判断风险暴露的建模是否合理 通常,此分析是基于历史数据,而对历史风险暴露的估计可能会影响未来的风险暴露。 因此,计算因子风险暴露是不够的。 必须对风险暴露保持信心,并明白对风险暴…

Vue框架学习笔记——键盘事件

文章目录 前文提要键盘事件(并不是所有按键都能绑定键盘事件)常用的按键不同的tab和四个按键keyCode绑定键盘事件(不推荐)Vue.config.keyCode.自定义键名 键码 神奇的猜想div标签和click.enterbutton标签和click.enter 前文提要 …

定长子网划分和变长子网划分问题_二叉树解法_通俗易懂_配考研真题

引入:定长子网划分和变长子网划分的基本概念 定长子网划分和变长子网划分的基本概念 目前常用的子网划分,是基于CIDR的子网划分,也就是将给定的CIDR地址块划分为若干个较小的CIDR地址块。 定长子网划分: 使用同一个子网掩码来划分子网,因…

【版本管理 | Git】Git rebase 命令最佳实践!确定不来看看?

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

智能优化算法应用:基于斑点鬣狗算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于斑点鬣狗算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于斑点鬣狗算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.斑点鬣狗算法4.实验参数设定5.算法结果6.参考…

VM虚拟机中Ubuntu14.04安装VM tools后仍不能全屏显示

1、查看Ubuntu所支持的分辨率大小。 在终端处输入: xrandr,回车 2、输入你想设置的分辨率参数。 我设置的为1360x768,大家可以根据自己的具体设备设置。 在终端输入:xrandr -s 1360x768 注意:这里1360后边是字母 x 且…

<JavaEE> Thread线程类 和 Thread的常用方法

目录 一、Thread概述 二、构造方法 三、常用方法 1.1 getId()、getName()、getState()、getPririty() 1.2 start() 1.3 isDaemon()、setDaemon() 1.4 isAlive() 1.5 currentThread() 1.6 Interrupt()、interrupted()、isInterrupted() 1.6.1 方法一:添加共…

S25FL系列FLASH读写的FPGA实现

文章目录 实现思路具体实现子模块实现top模块 测试Something 实现思路 建议读者先对 S25FL-S 系列 FLASH 进行了解,我之前的博文中有详细介绍。 笔者的芯片具体型号为 S25FL256SAGNFI00,存储容量 256Mb,增强高性能 EHPLC,4KB 与 6…

Java中static、final、static final的区别

文章目录 finalstaticstatic final final final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。 final修…

nginx配置文件的简单结构

nginx的配置文件(nginx.conf)整体上可分为三个部分:全局块、events块、http块 区域职责全局块配置和nginx运行相关的全局配置events块配置和网络连接相关的配置http块配置代理、缓存、日志记录、虚拟主机等配置在http块中,可以包含…

python:傅里叶分析,傅里叶变换 FFT

使用python进行傅里叶分析,傅里叶变换 FFT 的一些关键概念的引入: 1.1.离散傅里叶变换(DFT) 离散傅里叶变换(discrete Fourier transform) 傅里叶分析方法是信号分析的最基本方法,傅里叶变换是傅里叶分析的核心&…

摆脱无用代码的负担:TreeShaking 的魔力

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

【教学类-06-12】20231126 (一)如何让加减乘除题目从小到大排序(以1-20之间加法为例,做正序排列用)

结果展示 优化后 优化前 背景需求: 生成列表 单独抽取显示题目排序方法 存在问题: 我希望 00 01 02……这样排序,但是实际上,除了第一个加数会从小到大排序,第二个被加数的第十位数和个位数都会从小到大排序,也就是…

NeoPreference延伸:为SharedPreferences配置项生成配置页面

代码地址:https://github.com/Nagi1225/NeoPreference.git 最初在开发NeoPreference这个SharedPreferences工具的时候,就期望完成三个目标: 代码简洁,新增配置项的时候一行代码(最多两行);读写…

线程的常用方法-wait和notify以及线程的结束方式

再复习一下Java中的线程的状态图 wait和sleep的区别是:wait需要先持有锁(wait需要再synchronized代码块中执行),执行后会让出锁。而sleep不需要先持有锁,执行后也不会释放锁(有锁的话抱着锁睡觉&#xff09…

SpringBoot 环境使用 Redis + AOP + 自定义注解实现接口幂等性

目录 一、前言二、主流实现方案介绍2.1、前端按钮做加载状态限制(必备)2.2、客户端使用唯一标识符2.3、服务端通过检测请求参数进行幂等校验(本文使用) 三、代码实现3.1、POM3.2、application.yml3.3、Redis配置类3.4、自定义注解…

基于Haclon的标签旋转项目案例

项目要求: 图为HALCON附图“25interleaved_exposure_04”,里面为旋转的二维码标签,请将其旋转到水平位置。 项目知识: 在HALCON中进行图像平移和旋转通常有以下步骤: (1)通过hom_mat2d_ident…

jQuery_03 dom对象和jQuery对象的互相转换

dom对象和jQuery对象 dom对象 jQuery对象 在一个文件中同时存在两种对象 dom对象: 通过js中的document对象获取的对象 或者创建的对象 jQuery对象: 通过jQuery中的函数获取的对象。 为什么使用dom或jQuery对象呢? 目的是 要使用dom对象的函数或者属性 以及呢 要…

<JavaEE> 线程的五种创建方法 和 查看线程的两种方式

目录 一、线程的创建方法 1.1 继承 Thread -> 重写 run 方法 1.2 使用匿名内部类 -> 继承 Thread -> 重写 run 方法 1.3 实现 Runnable 接口 -> 重写 run 方法 1.4 使用匿名内部类 -> 实现 Runnable 接口 -> 重写 run 方法 1.5 使用 lambda 表达式 二…