【发布时间】:2020-11-19 07:29:12
【问题描述】:
我正在将一个库从 .NET Framework 迁移到 .NET Core。在这个库中,我提供了一种方便的方法来将 XML 数据保存在用户的AppData 文件夹中。
在 .Net Core 下运行时,出现异常:
拒绝访问路径“C:\Users”
当时_userDataPath的值为:
C:\Users\cedbo\AppData\Roaming\MyApp
这在 .NET Framework 下可以正常工作,因此不是授权问题。
// compute filepath
_userDataPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
appName);
_userDataFile = Path.Combine(_userDataPath, "UserData.xml");
// load data or create file if required.
T userData = null;
if (File.Exists(_userDataFile)) // !!! Returns false even when file exists
{
userData = XmlTools.GetFromXml<T>(_userDataFile);
}
else
{
userData = new T();
if (!Directory.Exists(_userDataPath)) // !!! Returns false even when directory exists
{
Directory.CreateDirectory(_userDataPath); // Exception: Access to the path 'C:\Users' is denied.
}
XmlTools.SaveToXml<T>(userData, _userDataFile);
}
如果 .NET Core 建议使用另一种标准方法,我已准备好使用另一种标准方法,但我没有找到任何关于此写入访问限制的内容,也没有发现 .NET Core 中推荐的另一种存储用户数据的方式。
谁能给点建议?
提前谢谢你。
【问题讨论】:
-
_userDataPath的值是多少? -
看起来组合的路径不正确...您能否硬编码 XML 文件的确切路径,只是为了验证这确实是一个访问问题到正确的路径?
-
@CoolBots 在调试模式下,我看到变量中的路径是正确的。这发生在谈论 XML 文件之前,它是在创建包含文件夹时,不管里面会放什么。
-
做了额外的检查:测试xml文件和包含的文件夹是否存在不会崩溃,但即使这些元素确实存在也会返回false。
标签: c# .net-core settings access-denied