LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#从字符串中分离提取文件路径、文件名及扩展名

admin
2026年1月19日 20:11 本文热度 63

在 C# 中从完整文件名字符串中准确分离出**文件路径、文件名(不含扩展名)、文件扩展名(含 / 不含小数点)**,C# 提供了两种核心实现方案,其中推荐优先使用专门的文件操作 API,具体如下:

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

System.IO.Path 类是.NET 提供的专门用于处理文件路径、文件名的工具类,内置了跨平台兼容逻辑,能够自动处理不同操作系统的路径分隔符(\ 或 /),无需手动处理字符串分割,避免边界问题(如路径中包含多个小数点、多级目录等)。

核心关键方法

方法 / 属性
功能说明
返回结果示例(以路径@"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

完整可运行代码示例



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

using System;
using System.IO;

namespace FilePathSplitDemo
{
    class Program
    {
        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);
            }
        }
    }
}



运行结果

plaintext



1
2
3
4
5
6

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



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

如果特殊场景下无法使用 System.IO.Path 类,可以通过字符串操作方法(LastIndexOfSubstring)手动分割,但需要自行处理大量边界情况(如无扩展名、路径中包含小数点、路径分隔符不一致等),容易出现 bug。

核心思路

  1. 1. 先通过 LastIndexOf(Path.DirectorySeparatorChar) 或 LastIndexOf(Path.AltDirectorySeparatorChar) 找到最后一个路径分隔符,分离目录路径完整文件名
  2. 2. 再通过 LastIndexOf('.') 在完整文件名中找到小数点,分离文件名(不含扩展名)文件扩展名

简易代码示例



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

using System;

namespace FilePathSplitManualDemo
{
    class Program
    {
        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. 1. **System.IO.Path 类的优势**:无需关注路径分隔符类型(Windows 的\、Linux/macOS 的/),自动兼容跨平台场景,且能正确处理特殊情况(如文件名中包含多个小数点:test.file.txt,会正确提取扩展名.txt);
  2. 2. 命名空间引用:使用 System.IO.Path 类必须在代码文件顶部添加 using System.IO; 引用;
  3. 3. 空值 / 无效路径处理:实际开发中建议对输入路径进行非空判断,并包裹 try-catch 捕获 ArgumentException(无效路径格式)、ArgumentNullException(路径为null)等异常;
  4. 4. 扩展名格式Path.GetExtension() 返回的扩展名包含小数点.,如果需要去除小数点,可使用 TrimStart('.') 方法(注意判空,避免空字符串报错)。

总结

  1. 1. 优先使用 System.IO.Path 类的专用方法(GetDirectoryNameGetFileNameGetFileNameWithoutExtensionGetExtension),简洁、安全、无坑;
  2. 2. 手动字符串分割仅适用于特殊受限场景,需额外处理大量边界情况,不推荐常规开发使用;
  3. 3. 核心目标(分离路径、文件名、扩展名)可通过 Path 类快速实现,且具备跨平台兼容性。


阅读原文:原文链接


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