zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【.Net实用方法总结】 整理并总结System.IO中Path类及其方法介绍

Net方法IO 总结 介绍 整理 及其 实用
2023-09-14 09:16:26 时间

🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。
🐬个人主页:会敲键盘的肘子
🐰系列专栏:.Net实用方法总结
🦀专栏简介:博主针对.Net开发和C站问答过程中遇到的问题进行总结,形成本专栏,希望可以帮助到您解决问题。
🐶座右铭:总有一天你所坚持的会反过来拥抱你。


在这里插入图片描述

🌈写在前面:

本文主要介绍System.IO命名空间的Path类,介绍其常用的方法和实践。


👉本文关键字:System.IO、Path类、文件或目录路径信息、方法实践、C#

1️⃣ System.IO命名空间

.NET中的IO操作命名空间,包含允许读写文件数据流的类型以及提供基本文件和目录支持的类型。

我们在.NET中的IO操作,经常需要调用一下几个类。

  • FileStream类

​ 文件流类,负责大文件的拷贝,读写。

  • Path类

​ Path类中方法,基本都是对字符串(文件名)的操作,与实际文件没多大关系。

  • File类

    File类可以进行一些对小文件拷贝、剪切操作,还能读一些文档文件。

  • Dirctory

    目录操作,创建文件、删除目录,获取目录下文件名等等。

2️⃣ Path类

♈ 定义

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

public static class Path

♉ 常用方法

ChangeExtension(String, String) 更改路径字符串的扩展名
public static string? ChangeExtension (string? path, string? extension);

参数

path

string

要修改的路径信息。

string

extension

新的扩展名(有或没有前导句点)。 指定 null 以从 path 移除现有扩展名。

返回

已修改的路径信息。

在基于 Windows 的桌面平台上,如果 pathnull 或空字符串 (“”),则返回的路径信息是未修改的。 如果 extensionnull,则返回的字符串包含指定的路径(其扩展名已移除)。 如果 path 不具有扩展名且 extension 不为 null,则返回的路径字符串包含追加到 path 结尾的 extension

示例

	public void ChangeExtension()
    {
        string goodFileName = @"C:\mydir\myfile.com.extension";
        string badFileName = @"C:\mydir\";
        string result;

        result = Path.ChangeExtension(goodFileName, ".old");
        Console.WriteLine("ChangeExtension({0}, '.old') returns '{1}'",
            goodFileName, result);

        result = Path.ChangeExtension(goodFileName, "");
        Console.WriteLine("ChangeExtension({0}, '') returns '{1}'",
            goodFileName, result);

        result = Path.ChangeExtension(badFileName, ".old");
        Console.WriteLine("ChangeExtension({0}, '.old') returns '{1}'",
            badFileName, result);

        // This code produces output similar to the following:
        //
        // ChangeExtension(C:\mydir\myfile.com.extension, '.old') returns 'C:\mydir\myfile.com.old'
        // ChangeExtension(C:\mydir\myfile.com.extension, '') returns 'C:\mydir\myfile.com.'
        // ChangeExtension(C:\mydir\, '.old') returns 'C:\mydir\.old'
	}
Combine(String[]) 将字符串数组组合成一个路径

注:Combine(String, String)Combine(String, String, String)Combine(String, String, String, String)类似

public static string Combine (params string[] paths);

参数

path

string[]

由路径的各部分构成的数组。

返回

string

已组合的路径。

示例

string[] paths = {@"d:\archives", "2001", "media", "images"};
string fullPath = Path.Combine(paths);
Console.WriteLine(fullPath);
GetFileName(String) 返回指定路径字符串的文件名和扩展名。
public static string? GetFileName (string? path);

参数

path

string

从中获取文件名和扩展名的路径字符串。

返回

string

path 中最后的目录分隔符后的字符。 如果 path 的最后一个字符是目录或卷分隔符,则此方法返回 Empty。 如果 pathnull,则此方法返回 null

示例

string fileName = @"C:\mydir\myfile.ext";
string path = @"C:\mydir\";
string result;

result = Path.GetFileName(fileName);
Console.WriteLine("GetFileName('{0}') returns '{1}'",
    fileName, result);

result = Path.GetFileName(path);
Console.WriteLine("GetFileName('{0}') returns '{1}'",
    path, result);

// This code produces output similar to the following:
//
// GetFileName('C:\mydir\myfile.ext') returns 'myfile.ext'
// GetFileName('C:\mydir\') returns ''
GetFileNameWithoutExtension(String) 返回不具有扩展名的指定路径字符串的文件名
public static string? GetFileNameWithoutExtension (string? path);

参数

path

string

文件的路径。

返回

string

path 中最后的目录分隔符后的字符,不包括最后的句点 (.) 以及之后的所有字符。

示例

string fileName = @"C:\mydir\myfile.ext";
string path = @"C:\mydir\";
string result;

result = Path.GetFileNameWithoutExtension(fileName);
Console.WriteLine("GetFileNameWithoutExtension('{0}') returns '{1}'",
    fileName, result);

result = Path.GetFileName(path);
Console.WriteLine("GetFileName('{0}') returns '{1}'",
    path, result);

// This code produces output similar to the following:
//
// GetFileNameWithoutExtension('C:\mydir\myfile.ext') returns 'myfile'
// GetFileName('C:\mydir\') returns ''
GetFullPath(String) 返回指定路径字符串的绝对路径
public static string GetFullPath (string path);

参数

path

string

要获取其绝对路径信息的文件或目录。

返回

string

完全限定的位置 path,例如“C:\MyFile.txt”。

示例

string fileName = "myfile.ext";
string path1 = @"mydir";
string path2 = @"\mydir";
string fullPath;

fullPath = Path.GetFullPath(path1);
Console.WriteLine("GetFullPath('{0}') returns '{1}'",
    path1, fullPath);

fullPath = Path.GetFullPath(fileName);
Console.WriteLine("GetFullPath('{0}') returns '{1}'",
    fileName, fullPath);

fullPath = Path.GetFullPath(path2);
Console.WriteLine("GetFullPath('{0}') returns '{1}'",
    path2, fullPath);

// Output is based on your current directory, except
// in the last case, where it is based on the root drive
// GetFullPath('mydir') returns 'C:\temp\Demo\mydir'
// GetFullPath('myfile.ext') returns 'C:\temp\Demo\myfile.ext'
// GetFullPath('\mydir') returns 'C:\mydir'

补充

如果 path 为相对路径,此重载将返回完全限定的路径,该路径可以基于当前驱动器和当前目录。 应用程序执行时,当前驱动器和当前目录可以随时更改。 因此,无法提前确定此重载返回的路径。 若要返回确定性路径,请调用 GetFullPath(String, String) 重载。 还可以调用 IsPathFullyQualified 该方法来确定路径是完全限定还是相对路径,因此是否需要调用 GetFullPath

GetFullPath(String, String) 从完全限定的基路径和相对路径返回绝对路径
public static string GetFullPath (string path, string basePath);

参数

path

string

连接到 basePath 的相对路径。

basePath

string

完全限定路径的开头。

返回

string

绝对路径。

示例

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string basePath = Environment.CurrentDirectory;
        string relativePath = "./data/output.xml";
 
        // Unexpectedly change the current directory.
        Environment.CurrentDirectory = "C:/Users/Public/Documents/";
        
        string fullPath = Path.GetFullPath(relativePath, basePath);
        Console.WriteLine($"Current directory:\n   {Environment.CurrentDirectory}");
        Console.WriteLine($"Fully qualified path:\n   {fullPath}");
    }
}
// The example displays the following output:
//   Current directory:
//      C:\Users\Public\Documents
//   Fully qualified path:
//      C:\Utilities\data\output.xml
GetDirectoryName(String) 返回指定路径的目录信息
public static string? GetDirectoryName (string? path);

参数

path

string

文件或目录的路径。

返回

string

path 的目录信息;如果 path 表示根目录或为 null,则为 null。 如果 path 不包含目录信息,则返回 Empty

示例

string filePath = @"C:\MyDir\MySubDir\myfile.ext";
string directoryName;
int i = 0;

while (filePath != null)
{
    directoryName = Path.GetDirectoryName(filePath);
    Console.WriteLine("GetDirectoryName('{0}') returns '{1}'",
        filePath, directoryName);
    filePath = directoryName;
    if (i == 1)
    {
        filePath = directoryName + @"\";  // this will preserve the previous path
    }
    i++;
}
/*
This code produces the following output:

GetDirectoryName('C:\MyDir\MySubDir\myfile.ext') returns 'C:\MyDir\MySubDir'
GetDirectoryName('C:\MyDir\MySubDir') returns 'C:\MyDir'
GetDirectoryName('C:\MyDir\') returns 'C:\MyDir'
GetDirectoryName('C:\MyDir') returns 'C:\'
GetDirectoryName('C:\') returns ''
*/
GetExtension(String) 返回指定路径字符串的扩展名(包括句点“.”)
public static string? GetExtension (string? path);

参数

path

string

从中获取扩展名的路径字符串。

返回

string

指定路径的扩展名(包含句点“.”)、或 null、或 Empty。 如果 pathnull,则 GetExtension(String) 返回 null。 如果 path 不具有扩展名信息,则 GetExtension(String) 返回 Empty

示例

string fileName = @"C:\mydir.old\myfile.ext";
string path = @"C:\mydir.old\";
string extension;

extension = Path.GetExtension(fileName);
Console.WriteLine("GetExtension('{0}') returns '{1}'",
    fileName, extension);

extension = Path.GetExtension(path);
Console.WriteLine("GetExtension('{0}') returns '{1}'",
    path, extension);

// This code produces output similar to the following:
//
// GetExtension('C:\mydir.old\myfile.ext') returns '.ext'
// GetExtension('C:\mydir.old\') returns ''
GetPathRoot(String) 从指定字符串包含的路径中获取根目录信息
public static string? GetPathRoot (string? path);

参数

path

string

一个字符串,包含要从中获取根目录信息的路径。

返回

string

如果为根路径,则为 path 的根目录。

  • 或 - 如果 path 不包含根目录信息,则为 Empty
  • 或 - 如果 pathnull 或实际上为空,则为 null

示例

string path = @"\mydir\";
string fileName = "myfile.ext";
string fullPath = @"C:\mydir\myfile.ext";
string pathRoot;

pathRoot = Path.GetPathRoot(path);
Console.WriteLine("GetPathRoot('{0}') returns '{1}'",
    path, pathRoot);

pathRoot = Path.GetPathRoot(fileName);
Console.WriteLine("GetPathRoot('{0}') returns '{1}'",
    fileName, pathRoot);

pathRoot = Path.GetPathRoot(fullPath);
Console.WriteLine("GetPathRoot('{0}') returns '{1}'",
    fullPath, pathRoot);

// This code produces output similar to the following:
//
// GetPathRoot('\mydir\') returns '\'
// GetPathRoot('myfile.ext') returns ''
// GetPathRoot('C:\mydir\myfile.ext') returns 'C:\'string fileName = @"C:\mydir.old\myfile.ext";
string path = @"C:\mydir.old\";
string extension;

extension = Path.GetExtension(fileName);
Console.WriteLine("GetExtension('{0}') returns '{1}'",
    fileName, extension);

extension = Path.GetExtension(path);
Console.WriteLine("GetExtension('{0}') returns '{1}'",
    path, extension);

// This code produces output similar to the following:
//
// GetExtension('C:\mydir.old\myfile.ext') returns '.ext'
// GetExtension('C:\mydir.old\') returns ''
HasExtension(String) 确定路径是否包括文件扩展名
public static bool HasExtension (string? path);

参数

path

string

用于搜索扩展名的路径。

返回

bool

true 如果路径中最后一个目录分隔符后面的字符 (\ 或 /) 或卷分隔符 (:) 包含句点 (.) 后跟一个或多个字符,则为 ;否则为 false

示例

string fileName1 = "myfile.ext";
string fileName2 = @"mydir\myfile";
string path = @"C:\mydir.ext\";
bool result;

result = Path.HasExtension(fileName1);
Console.WriteLine("HasExtension('{0}') returns {1}",
    fileName1, result);

result = Path.HasExtension(fileName2);
Console.WriteLine("HasExtension('{0}') returns {1}",
    fileName2, result);

result = Path.HasExtension(path);
Console.WriteLine("HasExtension('{0}') returns {1}",
    path, result);

// This code produces output similar to the following:
//
// HasExtension('myfile.ext') returns True
// HasExtension('mydir\myfile') returns False
// HasExtension('C:\mydir.ext\') returns False
IsPathRooted(String) 返回一个值,该值指示指定的路径字符串是否包含根
public static bool IsPathRooted (string? path);

参数

path

string

要测试的路径。

返回

bool

如果 path 包含一个根,则为 true;否则为 false

示例

string fileName = @"C:\mydir\myfile.ext";
string UncPath = @"\\myPc\mydir\myfile";
string relativePath = @"mydir\sudir\";
bool result;

result = Path.IsPathRooted(fileName);
Console.WriteLine("IsPathRooted('{0}') returns {1}",
    fileName, result);

result = Path.IsPathRooted(UncPath);
Console.WriteLine("IsPathRooted('{0}') returns {1}",
    UncPath, result);

result = Path.IsPathRooted(relativePath);
Console.WriteLine("IsPathRooted('{0}') returns {1}",
    relativePath, result);

// This code produces output similar to the following:
//
// IsPathRooted('C:\mydir\myfile.ext') returns True
// IsPathRooted('\\myPc\mydir\myfile') returns True
// IsPathRooted('mydir\sudir\') returns False
Join(String[]) 将路径数组连接到一个路径中
public static bool IsPathRooted (string? path);

参数

path

string[]

路径的数组。

返回

bool

连接的路径。

补充

Combine与该方法不同,该方法Join不会尝试对返回的路径进行根目录。 (也就是说,如果除最后一个路径之外的任何路径 paths是绝对路径,该方法 Join 不会像该方法那样 Combine 放弃以前的路径。

示例

using System;
using System.IO;

class Program2
{
    static void Main()
    {
        var path1 = "C:/Program Files/";
        var path2 = "Utilities/SystemUtilities";
        ShowPathInformation(path1, path2);

        path1 = "C:/";
        path2 = "/Program Files";
        ShowPathInformation(path1, path2);

        path1 = "C:/Users/Public/Documents/";
        path2 = "C:/Users/User1/Documents/Financial/";
        ShowPathInformation(path1, path2);
    }

    private static void ShowPathInformation(string path1, string path2)
    {
        var result = Path.Join(path1.AsSpan(), path2.AsSpan());
        Console.WriteLine($"Concatenating  '{path1}' and '{path2}'");
        Console.WriteLine($"   Path.Join:     '{result}'");
        Console.WriteLine($"   Path.Combine:  '{Path.Combine(path1, path2)}'");
    }
}
// The example displays the following output if run on a Windows system:
//    Concatenating  'C:/Program Files/' and 'Utilities/SystemUtilities'
//       Path.Join:     'C:/Program Files/Utilities/SystemUtilities'
//       Path.Combine:  'C:/Program Files/Utilities/SystemUtilities'
//
//    Concatenating  'C:/' and '/Program Files'
//       Path.Join:     'C://Program Files'
//       Path.Combine:  '/Program Files'
//
//    Concatenating  'C:/Users/Public/Documents/' and 'C:/Users/User1/Documents/Financial/'
//       Path.Join:     'C:/Users/Public/Documents/C:/Users/User1/Documents/Financial/'
//       Path.Combine:  'C:/Users/User1/Documents/Financial/'

♊ 注解

路径是提供文件或目录位置的字符串。路径可以包含绝对或相对位置信息。 绝对路径完全指定位置:无论当前位置如何,都可以唯一标识文件或目录。 相对路径指定部分位置:定位使用相对路径指定的文件时,当前位置用作起点。

类的 Path 大多数成员不会与文件系统交互,并且不验证路径字符串指定的文件是否存在。 Path 修改路径字符串的类成员(例如 ChangeExtension)对文件系统中的文件名称没有影响。

类的成员 Path 使你可以快速轻松地执行常见操作,例如确定文件扩展名是否是路径的一部分,并将两个字符串组合成一个路径名称。

类的所有成员都是静态的 Path ,因此无需路径实例即可调用。

备注

在接受路径作为输入字符串的成员中,该路径的格式必须良好或引发异常。 例如,如果路径完全限定,但以空格开头,则路径不会在类的方法中修整。 因此,路径格式不正确,并引发异常。 同样,路径或路径的组合不能完全限定两次。 例如,“c:temp c:\windows”在大多数情况下也会引发异常。 使用接受路径字符串的方法时,请确保路径格式良好。

♋ 更多方法

更多方法请查阅官方文档Path类


⭐写在结尾:

文章中出现的任何错误请大家批评指出,一定及时修改。

希望写在这里的小伙伴能给个三连支持