path类纯字符串操作,轻量安全;fileinfo在文件存在时更高效;winforms/wpf选文件路径格式不同;程序目录应优先用appcontext.basedirectory。

用 System.IO.Path 解析路径字符串
不需要打开文件,只是从一个字符串中提取目录、文件名或扩展名时,Path 类是最轻量、最安全的选择。它不访问磁盘,纯字符串操作,跨平台兼容性好。
-
Path.GetDirectoryName(@"C:datalog.txt")→"C:data" -
Path.GetFileName(@"C:datalog.txt")→"log.txt" -
Path.GetExtension(@"C:datalog.txt")→".txt" -
Path.GetFullPath("..config.json")→ 转为绝对路径(基于当前工作目录)
注意:Path.GetFullPath 会尝试解析相对路径,但不会验证路径是否存在;若当前目录已改变(比如被其他线程或外部程序修改),结果可能出人意料。
用 FileInfo 获取文件元数据和路径信息
当你已经知道文件存在,且需要同时获取路径、大小、创建时间等信息时,FileInfo 比反复调用 Path 方法更高效——它内部只做一次系统调用。
var file = new FileInfo(@"C: emp eport.pdf"); Console.WriteLine(file.FullName); // 完整路径(含驱动器) Console.WriteLine(file.Name); // 文件名 + 扩展名 Console.WriteLine(file.DirectoryName); // 父目录路径 Console.WriteLine(file.Length); // 字节大小
关键点:FileInfo 构造函数不校验文件是否存在,只有在你访问 Length、Exists 等属性时才触发 IO。如果路径非法(如包含 ?),构造时就会抛 ArgumentException。
【极品模板】出品的一款功能强大、安全性高、调用简单、扩展灵活的响应式多语言企业网站管理系统。 产品主要功能如下: 01、支持多语言扩展(独立内容表,可一键复制中文版数据) 02、支持一键修改后台路径; 03、杜绝常见弱口令,内置多种参数过滤、有效防范常见XSS; 04、支持文件分片上传功能,实现大文件轻松上传; 05、支持一键获取微信公众号文章(保存文章的图片到本地服务器); 06、支持一键
用户选择文件后怎么拿到路径:WinForms 和 WPF 差异
桌面应用中“让用户选文件”是常见场景,但 WinForms 和 WPF 的控件返回的路径格式不同,容易忽略:
- WinForms
OpenFileDialog的FileName属性返回的是完整路径字符串,如"C:\docs\file.txt" - WPF
Microsoft.Win32.OpenFileDialog的FileName同样返回完整路径,但它的SafeFileName只返回文件名(不含路径),且已过滤掉危险字符 - 两者都**不会自动处理 UNC 路径中的双反斜杠问题**;若用户选了网络路径如
\servershareile.txt,直接使用即可,无需额外转义
别在 UI 层做 Path.GetFullPath —— 用户选的已经是有效绝对路径,再转可能引入冗余 . 或意外改变语义。
获取“当前程序所在目录”不是 Environment.CurrentDirectory
很多人误用 Environment.CurrentDirectory 当作程序根目录,但它其实是进程的工作目录,可被任意代码(包括第三方库)修改,不稳定。
- 要获取
MyApp.exe所在文件夹:Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) - 要获取项目输出目录(如调试时的
binDebug):AppContext.BaseDirectory - 要读取同级配置文件:
Path.Combine(AppContext.BaseDirectory, "settings.json")
特别注意:Assembly.GetExecutingAssembly().Location 在 .NET Core / .NET 5+ 中可能返回临时编译路径(如热重载场景),此时 AppContext.BaseDirectory 更可靠。









