调用DirectoryInfo.GetFiles时指定路径仍被自动拼接程序运行目录
根因
DirectoryInfo 不会自动解析Windows环境变量占位符,传入带%的路径字符串会被识别为相对路径,自动和程序当前工作目录拼接,最终形成无效路径抛出System.IO.DirectoryNotFoundException异常。
解决方案
方案1:先展开环境变量再传入
调用 Environment.ExpandEnvironmentVariables 方法先把占位符替换为实际路径:
// 先解析环境变量 string desktopPath = Environment.ExpandEnvironmentVariables(@"%homepath%\Desktop"); string[] fNames = new DirectoryInfo(desktopPath) .GetFiles("*.bak") .Select(x => x.Name) .ToArray();
方案2(更推荐):直接调用系统API获取桌面路径
使用 Environment.GetFolderPath 配合系统已知文件夹枚举获取桌面路径,兼容用户自定义桌面位置、多语言系统等场景,稳定性更高:
// 直接获取系统注册的桌面物理路径 string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); string[] fNames = new DirectoryInfo(desktopPath) .GetFiles("*.bak") .Select(x => x.Name) .ToArray();
内容的提问来源于stack exchange,提问作者gui2
相关产品推荐
相关产品推荐

