LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

C# 准确分离文件路径、文件名与扩展名的两种实现方案

admin
2026年10月23日 10:48 本文热度 34

前言

C# 开发过程中,经常需要从一个完整的文件路径字符串中提取出目录路径、文件名(不含扩展名)以及文件扩展名(含或不含小数点)。

虽然看似简单,但若采用原始字符串操作方式处理,很容易因路径格式复杂(如多级目录、多个小数点、跨平台分隔符等)而引入错误。为此,.NET 提供了专门用于处理路径信息的 System.IO.Path 类,能够安全、高效地完成上述任务。

本文将系统介绍两种实现方案,并重点推荐使用专业 API 的方式。

正文

方案一:推荐优先使用 System.IO.Path 类(专业、无坑)

System.IO.Path 是 .NET 框架内置的路径处理工具类,专为解析和构建文件路径而设计。它能自动识别不同操作系统下的路径分隔符(Windows 使用 \,Linux/macOS 使用 /),并正确处理各种边界情况(如文件名中包含多个小数点、相对路径、空扩展名等),是开发中首选的解决方案。

核心关键方法

方法 / 属性
功能说明
返回结果示例(以路径 @"D:\Projects\C#\DemoFile.txt" 为例)
Path.GetDirectoryName(string path)
获取完整文件路径中的目录路径(文件所在文件夹路径)
D:\Projects\C#
Path.GetFileName(string path)
获取完整路径中的完整文件名(含扩展名)
DemoFile.txt
Path.GetFileNameWithoutExtension(string path)
获取文件名(不含扩展名)
DemoFile
Path.GetExtension(string path)
获取文件扩展名(含小数点.)
.txt

代码示例

using System;
using System.IO;

namespaceFilePathSplitDemo
{
    classProgram
    {
        static void Main(string[] args)
        {
            // 待处理的完整文件路径字符串(支持绝对路径、相对路径)
            string fullFilePath = @"D:\Projects\C#\DemoFile.txt";
            // 可选:测试相对路径
            // string fullFilePath = @"..\Documents\TestFile.pdf";

            try
            {
                // 1. 提取目录路径(文件所在文件夹)
                string directoryPath = Path.GetDirectoryName(fullFilePath);
                // 2. 提取完整文件名(含扩展名)
                string fullFileName = Path.GetFileName(fullFilePath);
                // 3. 提取文件名(不含扩展名)
                string fileNameWithoutExt = Path.GetFileNameWithoutExtension(fullFilePath);
                // 4. 提取文件扩展名(含小数点)
                string fileExtension = Path.GetExtension(fullFilePath);
                // 5. 可选:获取不含小数点的扩展名
                string fileExtensionWithoutDot = string.IsNullOrEmpty(fileExtension)
                    ? string.Empty
                    : fileExtension.TrimStart('.');

                // 输出结果
                Console.WriteLine("完整文件路径:" + fullFilePath);
                Console.WriteLine("目录路径:" + directoryPath);
                Console.WriteLine("完整文件名(含扩展名):" + fullFileName);
                Console.WriteLine("文件名(不含扩展名):" + fileNameWithoutExt);
                Console.WriteLine("文件扩展名(含小数点):" + fileExtension);
                Console.WriteLine("文件扩展名(不含小数点):" + fileExtensionWithoutDot);
            }
            catch (ArgumentException ex)
            {
                Console.WriteLine("路径格式无效:" + ex.Message);
            }
        }
    }
}

运行结果

完整文件路径:D:\Projects\C#\DemoFile.txt
目录路径:D:\Projects\C#
完整文件名(含扩展名):DemoFile.txt
文件名(不含扩展名):DemoFile
文件扩展名(含小数点):.txt
文件扩展名(不含小数点):txt

方案二:手动字符串分割(不推荐,仅作了解)

在极少数受限环境(如无法引用 System.IO 命名空间)下,开发者可能尝试通过字符串操作(如 LastIndexOf 和 Substring)手动拆分路径。然而,这种方式需自行处理大量边界条件,极易出错,不推荐在常规项目中使用。

核心思路

1、先通过 LastIndexOf(Path.DirectorySeparatorChar) 或 LastIndexOf('/') 找到最后一个路径分隔符,分离目录路径与完整文件名;

2、再通过 LastIndexOf('.') 在文件名中定位最后一个点,分离文件名主体与扩展名。

注意:此方法无法正确处理如 archive.tar.gz 等多段扩展名,也无法自动兼容不同操作系统的路径格式。

代码示例

using System;

namespaceFilePathSplitManualDemo
{
    classProgram
    {
        static void Main(string[] args)
        {
            string fullFilePath = @"D:\Projects\C#\DemoFile.txt";
            string directoryPath = string.Empty;
            string fullFileName = string.Empty;
            string fileNameWithoutExt = string.Empty;
            string fileExtension = string.Empty;

            // 1. 分离目录路径和完整文件名
            int lastPathSeparatorIndex = fullFilePath.LastIndexOf(Path.DirectorySeparatorChar);
            if (lastPathSeparatorIndex != -1)
            {
                directoryPath = fullFilePath.Substring(0, lastPathSeparatorIndex);
                fullFileName = fullFilePath.Substring(lastPathSeparatorIndex + 1);
            }
            else
            {
                // 无目录路径,仅为文件名
                fullFileName = fullFilePath;
            }

            // 2. 分离文件名(不含扩展名)和扩展名
            int lastDotIndex = fullFileName.LastIndexOf('.');
            if (lastDotIndex != -1)
            {
                fileNameWithoutExt = fullFileName.Substring(0, lastDotIndex);
                fileExtension = fullFileName.Substring(lastDotIndex);
            }
            else
            {
                // 无扩展名
                fileNameWithoutExt = fullFileName;
                fileExtension = string.Empty;
            }

            // 输出结果
            Console.WriteLine("目录路径:" + directoryPath);
            Console.WriteLine("完整文件名(含扩展名):" + fullFileName);
            Console.WriteLine("文件名(不含扩展名):" + fileNameWithoutExt);
            Console.WriteLine("文件扩展名(含小数点):" + fileExtension);
        }
    }
}

说明

1、优先使用 System.IO.Path 类:其提供的 GetDirectoryName、GetFileName、GetFileNameWithoutExtension 和 GetExtension 方法封装完善、逻辑健壮,能自动处理跨平台路径差异和复杂文件名结构。

2、避免手动字符串分割:虽然技术上可行,但需额外处理空路径、无扩展名、多小数点、非法字符等多种异常场景,维护成本高且易出错。

3、注意扩展名格式:Path.GetExtension() 返回的结果包含前导小数点(如 .txt),若需去除,应先判断是否为空再调用 TrimStart('.')。

4、异常安全:建议对输入路径进行非空校验,并使用 try-catch 捕获 ArgumentException 或 ArgumentNullException,提升程序鲁棒性。

总结

在 C# 中分离文件路径、文件名与扩展名是一项基础但关键的操作。借助 System.IO.Path 类,开发可以以简洁、安全、跨平台的方式完成这一任务,极大降低出错风险。相比之下,手动字符串操作虽能实现基本功能,但缺乏健壮性和可维护性,仅适用于特殊限制场景。因此,在绝大多数开发实践中,强烈推荐使用 System.IO.Path 提供的专业 API。

关键词

C#、#文件路径、#文件名、#扩展名、System.IO.Path、GetDirectoryName、#GetFileName、#GetFileNameWithoutExtension、GetExtension、#跨平台、#路径分隔符


阅读原文:点击这里​


该文章在 2026/10/23 10:50:19 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-9  粤公网安备44030602007207号