【.Net Core】深入理解IO之文件和目录

news/2024/5/19 22:25:38 标签: .netcore, 服务器, 数据库, c#, microsoft, asp.net, .net

【.NET Core】深入理解IO之文件和目录

文章目录

  • 【.NET Core】深入理解IO之文件和目录
    • 一、概述
    • 二、Directory详解
      • 2.1 Directory.CreateDirectory 方法
      • 2.2 Directory.Delete方法
      • 2.3 Directory.GetCreationTime方法
      • 2.4 Directory.GetCurrentDirectory方法
      • 2.5 Directory.GetDirectories 方法
      • 2.6 Directory.GetDirectoryRoot方法
      • 2.7 Directory.GetFiles 方法
      • 2.8 Directory.Move(String, String) 方法

一、概述

文件和流I/O(输入/输出)是指在存储媒介中传入或传出数据。在.NET中,System.IO命名空间包含允许以异步方式和同步方式对数据流和文件进行读取和写入操作的类型。这些命名空间还包含对文件执行压缩和解压的类型,以及通过管道和串行端口启用通信的类型。

文件是一个由字节组成的有序的命名集合,它具有永久存储。你将处理目录路径、磁盘存储、文件和目录名称。 相反,流是一个字节序列,可用于对后备存储进行读取和写入操作,后备存储可以是多个存储媒介之一(例如,磁盘或内存)。

二、Directory详解

Directory用于通过目录和子目录进行创建、移动和枚举的静态方法。 此类不能被继承。Directory类中的静态方法对所有方法执行安全检查。如果要多次重用对象,使用DirectoryInfo,因为安全检查并非始终是必需的。

如果只执行一个与目录相关的操作,则使用静态Directory方法而不是相对的DirectoryInfo实例方法可能更有效。

2.1 Directory.CreateDirectory 方法

在指定路径中创建所有目录。

  • 重载方法说明
方法说明
CreateDirectory(String)在指定路径中创建所有目录和子目录,除非它们已经存在。
CreateDirectory(String,UnixFileMode)在具有指定权限的指定路径中创建所有目录和子目录,除非它们已经存在。
  • 注解

将创建中path指定的任何目录和所有目录,除非它们已存在,或者除非的path某个部分无效。如果目录已存在,此方法不会创建新目录,但会返回DirectoryInfo目录的对象。

参数path指定目录路径,而不是文件路径。path不支持创建仅包含冒号字符(:)的目录,这将导致NotSupportedException引用。在Unix系统上,使用/(正斜杠作为路径分隔符)

  • 应用示例
c#"> public static void Main()
    {
        string path = @"D:\Goyeer\2024\02\22\";
        try
        {
            if (Directory.Exists(path))
            {
                Console.WriteLine("That path exists already.");
                return;
            }
            DirectoryInfo di = Directory.CreateDirectory(path);
            Console.WriteLine("The directory was created successfully at {0}.", Directory.GetCreationTime(path));
            di.Delete();
            Console.WriteLine("The directory was deleted successfully.");
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
        finally {}
    }

2.2 Directory.Delete方法

从指定路径删除空目录。

  • 重载方法说明
方法说明
Delete(String)从指定路径删除空目录
Delete(String,Boolean)删除指定的目录,并删除该目录中的所有子目录和文件
  • 注解

此方法的行为与相同,Delete(String,Boolean)。参数path可以指定相对或绝对路径信息。相对路径信息解释为相对于当前工作目录。删除目录之前path将从参数末尾删除尾部跟随空格。

数的 path 区分大小写对应于运行代码的文件系统的区分大小写。

在某些情况下,如果在 文件资源管理器 中打开了指定的目录,则 Delete方法可能无法删除它。

  • 应用示例
string path = @"D:\Goyeer\2024\02\22\";
Directory.Delete(topPath, true);

2.3 Directory.GetCreationTime方法

获取目录创建的日期和时间

  • 注解

此方法可能返回不准确的值,因为它使用本机函数,其值可能不会由操作系统持续更新。

如果参数中描述path目录不存在,此方法返回1601年1月1日

c#">DateTime dt = Directory.GetCreationTime(Environment.CurrentDirectory);

2.4 Directory.GetCurrentDirectory方法

GetCurrentDirectory只是返回操作系统的当前目录,并不一定返回你的应用程序的目录。比如你在应用程序中调用了打开文件对话框,你选择了一个文件,那么,这个文件所在的目录就成了操作系统的当前目录了。因此,千万不要用这个函数作为获取应用程序目录的手段。

获取当前应用程序主目录的方法是GetModuleFileName,先获取应用程序文件路径,然后截取调应用程序文件名称就是应用程序主目录了。

  • 示例
c#">string path = Directory.GetCurrentDirectory();
string targetPath = @"d:\temp";
Console.WriteLine("The current directory is {0}", path);
if (!Directory.Exists(targetPath))
{
    Directory.CreateDirectory(target);
}

2.5 Directory.GetDirectories 方法

返回满足指定条件的子目录的名称

  • 重载
方法说明
GetDirectories(String,String,SearchOption)返回与在指定目录中的指定搜索模式匹配的子目录的名称(包括其路径),还可以选择地搜索子目录
GetDirectories(String,String,EnumerationOptions)返回指定目录中与指定的搜索模式和枚举选项匹配的子目录的名称(包括其路径)
GetDirectories(String,String)返回指定目录中与指定的搜索模式匹配的子目录的名称(包括其路径)
GetDirectories(String)返回指定目录中的子目录的名称(包括其路径)
  • 注解

参数path可以指定相对或绝对路径信息,并且不区分大小写。相对路径信息解释为相对于当前工作目录。

  • 示例
c#">string[] dirs = Directory.GetDirectories(@"c:\", "p*", SearchOption.TopDirectoryOnly);
Console.WriteLine("The number of directories starting with p is {0}.", dirs.Length);
foreach (string dir in dirs)
{
   Console.WriteLine(dir);
}

2.6 Directory.GetDirectoryRoot方法

返回指定路径的卷信息、根信息或两者同时返回

  • 注解

此方法获取,返回GetFullPathpath的完全限定路径名,并返回根目录信息。指定路径不需要存在。允许path参数指定相对路径信息或绝对路径信息。相对路径信息被解释为相对于当前工作目录。

  • 示例
c#">public static void DirectoryRootDemo()
{
   string dir = @"C:\test";		
   try
   {
       Directory.SetCurrentDirectory(dir);
   }
   catch (DirectoryNotFoundException e)
   {
       Console.WriteLine("The specified directory does not exist. {0}", e);
   }
   Console.WriteLine("Root directory: {0}", Directory.GetDirectoryRoot(dir));
   Console.WriteLine("Current directory: {0}", Directory.GetCurrentDirectory());
}

2.7 Directory.GetFiles 方法

返回满足指定条件的文件的名称。

  • 重载
名称说明
GetFiles(String)返回指定目录中文件的名称(包括其路径)
GetFiles(String,String)返回指定目录中与指定的搜索模式匹配的文件的名称(包含其路径)
GetFiles(String,String,EnumerationOptions)返回指定目录中与指定的搜索模式和枚举选项匹配的文件的名称(包括其路径)
GetFiles(String,String,SearchOption)返回指定目录中与指定的搜索模式匹配的文件的名称(包含其路径),使用某个值确定是否要搜索子目录
  • 示例
c#">public  void ProcessDirectory(string targetDirectory)
{
     string [] fileEntries = Directory.GetFiles(targetDirectory);
     foreach(string fileName in fileEntries)
     {
          Console.WriteLine($"Current directory: {fileName}",
     }      
}

2.8 Directory.Move(String, String) 方法

将文件或目录及其内容移到新位置。此方法使用 指定 destDirName 的名称创建一个新目录,并将 的内容 sourceDirName(包括文件和目录)移动到新创建的目标目录。 然后,它会删除该 sourceDirName 目录

c#">public void MoveDemo(string[] args)
{
      string sourceDirectory = @"d:\source";
      string destinationDirectory = @"d:\destination";
      try
      {
          Directory.Move(sourceDirectory, destinationDirectory);
      }
      catch (Exception e)
      {
           Console.WriteLine(e.Message);
       }
 }

http://www.niftyadmin.cn/n/5395045.html

相关文章

【笔记】深度学习入门:基于Python的理论与实现(二)

神经网络的学习(神经网络的学习阶段,不是我们学习神经网络) 从数据中学习 训练数据和测试数据 机器学习中,一般将数据分为训练数据和测试数据两部分来进行学习和 实验等。首先,使用训练数据进行学习,寻找最…

SM100-40-080-P0-45-S1-B电机厦门参详

SM100-40-080-P0-45-S1-B交流伺服电机也是无刷电机,分为同步和异步电机,运动控制中一般都用同步电机,它的功率范围大,可以做到很大的功率。大惯量,最高转动速度低,且随着功率增大而快速降低。因而适合做低速…

疫情物资智能管理:Java与SpringBoot的实践

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

设计模式--委派模式与模板方法模式

委派模式 委派模式(Delegate Pattern)又叫委托模式,是一种面向对象的设计模式,允许对象组合实现与继承相同的代码重用。它的基本作用就是负责任务的调用和分配任务,是一种特殊的静态代理,可以理解为全权代…

我的NPI项目之Android Camera (四)-- 对应Camera tuning的一些理解

Camera作为产品的一个核心部件,在产品竞争力方面有着不容争辩的地位。所以,选择一款合适的Camera模组并发挥出模组的性能对项目极其重要。 在Camera的选型方面,我不用多说,国内前五的有:舜宇,丘钛&#xff…

【ArcGIS】基于DEM/LUCC等数据统计得到各集水区流域特征

基于DEM/LUCC等数据统计得到各集水区流域特征 提取不同集水区各类土地利用类型比例步骤1:划分集水区为独立面单元步骤2:批量掩膜提取得到各集水区土地利用类型比例步骤3:导入各集水区LUCC数据并统计得到各类型占比 提取坡度特征流域面坡度河道…

Java 学习和实践笔记(22):package(包机制)、JDK常见的包、类的导入

前面学的类,每创建一个类,在电脑上就是创建了一个对应的类文件。而package 相当于文件夹对文件的管理作用。主要用于管理类、用于解决类的重名问题。这个含义很简单。因为实际的程序,类可能有成千上万个,这样就需要把不同功能的类…

NVM存储设备MTBF介绍

1. 概念 1.1. MTBF MTBF(Mean Time Between Failure),平均故障间隔时间,也被称为平均无故障时间,是衡量一个产品的可靠性指标,其单位为小时。其定义为:产品在总的使用阶段累计工作时间与故障次数的比值: …