.NET 具有处理文件系统路径的内置机制。
在上一练习中,我们没有多少文件夹需要分析。 如果文件系统包含许多文件和文件夹,则手动生成路径可能很繁琐。 好在 .NET 提供了一些内置常量和实用工具函数,可简化文件路径的处理。
下面,你将了解 System.IO
命名空间和 System.Environment
类型中的一些常量和实用工具函数,以便使程序更智能且具有更强的复原能力。
确定当前目录
有时,你不知道程序应在哪个目录或路径中运行。 假设你希望程序使用当前目录,但不清楚路径。
.NET 通过 Directory.GetCurrentDirectory
方法公开当前目录的完整路径。
Console.WriteLine(Directory.GetCurrentDirectory());
如果从下列结构的“201”文件夹中运行上述代码,则 Directory.GetCurrentDirectory()
将返回 stores\201
:
? stores
? 201
使用特殊目录
.NET 可在任何位置运行:可在 Windows、macOS、Linux 上运行,甚至可在 iOS 和 Android 等移动操作系统上运行。 每个操作系统都可能有也可能没有特殊系统文件夹的概念,如专用于用户特定文件的主目录、桌面目录或用于存储临时文件的目录。
这些类型的特殊目录因操作系统而异。 因此尝试记住每个操作系统的目录结构并基于当前 OS 执行切换操作会非常麻烦。
System.Environment.SpecialFolder
枚举指定用于检索特殊系统文件夹路径的常量。
以下代码将返回返回操作系统的路径,该路径等效于 Windows\My Documents 文件夹路径或用户的主目录路径(如果此代码在 Linux 上运行)。
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
使用路径
路径是频繁出现的一个主题,.NET 包含一个称为 Path
的类,专用于处理路径。
Path
类位于 .NET 的 System.IO
命名空间中,无需安装。
特殊路径字符
不同的操作系统使用不同的字符来分隔目录级别。
例如,Windows 使用反斜杠 (stores\201
),而 macOS 使用正斜杠 (stores/201
)。
Path
类包含 DirectorySeparatorChar
字段,可帮助你使用正确的字符。
当你需要手动生成路径时,.NET 会自动将该字段解释为适用于操作系统的分隔符。
Console.WriteLine($"stores{Path.DirectorySeparatorChar}201");
// returns:
// stores\201 on Windows
//
// stores/201 on macOS
联接路径
Path
类使用文件和文件夹路径的概念,这些路径就是一些字符串。 可使用 Path
类自动生成正确的特定操作系统路径。
例如,如果想要获取“stores/201”文件夹的路径,可以使用 Path.Combine
函数来执行此操作。
Console.WriteLine(Path.Combine("stores","201")); // outputs: stores/201
请记住,可使用 Path.Combine
或 Path.DirectorySeparatorChar
类而不是硬编码字符串,因为程序可能在多种不同的操作系统上运行。 无论在什么操作系统上运行,Path
类始终能够正确设置路径的格式。
提示
Path
类并不关心内容是否确实存在。 路径是概念性的,而不是物理实体,且类可以为你生成和分析字符串。
确定文件扩展名
Path
类还可指示文件的扩展名。 如果你有一个文件,并且想要确定它是不是 JSON 文件,则可使用 Path.GetExtension
函数。
Console.WriteLine(Path.GetExtension("sales.json")); // outputs: .json
获取需要了解的有关文件或路径的所有信息
Path
类包含许多不同的方法,这些方法可执行各种操作。 可以分别使用 DirectoryInfo
或 FileInfo
类获取关于目录或文件的最完整信息。
string fileName = $"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales{Path.DirectorySeparatorChar}sales.json";
FileInfo info = new FileInfo(fileName);
Console.WriteLine($"Full Name: {info.FullName}{Environment.NewLine}Directory: {info.Directory}{Environment.NewLine}Extension: {info.Extension}{Environment.NewLine}Create Date: {info.CreationTime}"); // And many more
Path
、DirectoryInfo
和 FileInfo
类上有许多有用的属性和实用工具方法,但这些是最常使用的核心概念。 在下一练习中,你将编写路径和标识 .json 文件。