HOWTO · Csharp
C# 中从路径获取文件名
本文介绍如何从 C# 中的给定路径提取文件名。它包括 GetFileName()方法。
本页内容
在 C# 中,要获取文件系统路径的最后一个组成部分,可以使用 Path.GetFileName(位于 System.IO)。它会返回文件名及其扩展名,因此无需手动拆分路径。该方法只从路径字符串中提取文本,不会打开或检查文件。
使用 Path.GetFileName 获取路径的最后一个组成部分
将路径字符串传给 Path.GetFileName。返回值是当前操作系统所识别的目录分隔符之后的最后一个组成部分。例如,路径以 summary.csv 结尾时,返回的名称就是 summary.csv。
运行以下示例。代码和输出块按原文保留,其中的代码标识符和输出文本为英文:
本节中的代码以及显示的标签或输出仍为英文。
using System;
using System.IO;
class Program
{
static void Main()
{
string path = "reports/2026/summary.csv";
string fileName = Path.GetFileName(path);
Console.WriteLine(fileName);
}
}
summary.csv
此程序会将提取出的名称写入控制台。代码可以独立运行,并使用斜杠分隔路径;在常见的 .NET 平台上,斜杠会被识别为目录分隔符。
处理绝对路径、相对路径和平台特定路径
该方法既适用于绝对文件系统路径,也适用于相对文件系统路径。绝对路径包含从根目录或驱动器开始的位置信息;相对路径则以应用程序的工作目录为基准。Path.GetFileName 不会根据文件系统解析这两类路径,只会返回所提供字符串的最后一个组成部分。
分隔符的处理遵循 Path 的平台特定规则。像 reports/summary.csv 这样的斜杠分隔路径,在类 Unix 系统和 Windows 上都适用。像 C:\Reports\summary.csv 这样的 Windows 反斜杠路径,在 Windows 上会按预期解析。在类 Unix 系统上,反斜杠是普通字符,因此传入 Windows 格式的路径时,返回值可能是整个字符串,而不只是 summary.csv。如果应用程序要处理为其他操作系统生成的路径,应明确处理相应格式,不要假设当前主机平台会以相同方式解析它。
获取不带扩展名的文件名
如果需要的是 summary 而不是 summary.csv,请使用 Path.GetFileNameWithoutExtension。它会以相同方式提取最后一个组成部分,并移除最后一个扩展名。例如,在将 / 识别为分隔符的平台上,传入 reports/summary.csv 会返回 summary。
当要显示或比较的值不需要包含扩展名时,可以使用此 API。如果还需要单独获取扩展名,Path.GetExtension 会返回扩展名,并包含前面的句点。这些方法只处理路径文本,不会判断文件是否存在。
区分文件路径、URL 和文件验证
URL 不一定是文件系统路径。它可能包含方案、主机、查询字符串或片段,而且 URL 路径段遵循 URL 规则。输入是 URL 时,不要把它传给 Path.GetFileName 来代替 URL 解析;应使用 URI 解析器,再根据应用程序的需求处理解码后的名称。
提取名称也不会验证路径、证明路径可以安全使用,或检查文件是否存在。这些是不同的任务。请根据具体操作使用相应的路径验证和文件系统 API,并在打开或创建文件前遵循应用程序的安全规则。如果只需要从文件系统路径字符串中获取最后一个组成部分,Path.GetFileName 就是直接可用的 API。