MacOS/Linux下C#使用~开头路径未被识别为绝对路径的原因及修复方法
问题原因
~ 作为用户主目录的缩写是MacOS、Linux等类Unix系统的shell内置解析能力,.NET 标准IO API 本身不支持自动解析路径中的 ~ 符号,会直接将其识别为普通的目录名称,和当前程序的工作目录拼接后作为最终的访问路径,因此出现了报错中的路径拼接错误问题。
修复方案
你需要手动解析 ~ 对应的用户主目录路径后再拼接后续路径,推荐使用.NET 内置的跨平台API实现,无需手动处理不同系统的路径分隔符差异:
- 调用
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)获取当前用户主目录的绝对路径 - 使用
Path.Combine()方法拼接主目录路径和目标文件的相对路径
正确的代码示例如下:
// 读取当前用户主目录的绝对路径 string userHomePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); // 拼接得到目标文件的完整绝对路径 string targetFilePath = Path.Combine(userHomePath, "Desktop/data.bin"); byte[] bytes = await File.ReadAllBytesAsync(targetFilePath);
内容的提问来源于stack exchange,提问作者Matthew Layton
相关产品推荐
相关产品推荐

