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

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

一、概述

文件和流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系统上,使用/(正斜杠作为路径分隔符)

  • 应用示例
 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日

DateTime dt = Directory.GetCreationTime(Environment.CurrentDirectory);

2.4 Directory.GetCurrentDirectory方法

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


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

  • 示例
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 方法

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

  • 重载

1717427861347.png

  • 注解

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

  • 示例
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参数指定相对路径信息或绝对路径信息。相对路径信息被解释为相对于当前工作目录。

  • 示例
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 方法

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

  • 重载

1717427892665.png


  • 示例
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 目录

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);
       }
 }
目录
相关文章
|
10天前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:<https://github.com/khellang/Scrutor>
32 5
|
2月前
|
存储 开发框架 JSON
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
|
28天前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
38 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
18天前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
24 3
|
1月前
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
1月前
Visual Studio 快速分析 .NET Dump 文件
【11月更文挑战第10天】.NET Dump 文件是在 .NET 应用程序崩溃或出现问题时生成的,记录了应用程序的状态,包括内存对象、线程栈和模块信息。通过分析这些文件,开发人员可以定位和解决内存泄漏、死锁等问题。在 Visual Studio 中,可以通过调试工具、内存分析工具和符号加载等功能来详细分析 Dump 文件。此外,还可以使用第三方工具如 WinDbg 进行更深入的分析。
|
2月前
|
搜索推荐 索引
【文件IO】实现:查找文件并删除、文件复制、递归遍历目录查找文件
【文件IO】实现:查找文件并删除、文件复制、递归遍历目录查找文件
42 2
|
2月前
|
编解码 Java 程序员
【文件IO】文件内容操作
【文件IO】文件内容操作
58 2
|
2月前
|
存储 Java API
【文件IO】文件系统操作
【文件IO】文件系统操作
52 1
|
2月前
|
开发框架 JavaScript 前端开发
一个适用于 ASP.NET Core 的轻量级插件框架
一个适用于 ASP.NET Core 的轻量级插件框架