运行 .NET Core 3.0 时未经授权访问 C:\Users
Posted
技术标签:
【中文标题】运行 .NET Core 3.0 时未经授权访问 C:\\Users【英文标题】:Access to C:\Users unauthorized when running .NET Core 3.0运行 .NET Core 3.0 时未经授权访问 C:\Users 【发布时间】: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。
【参考方案1】:
这是我的发现:
我试图从 UWP 应用程序运行此代码。我试过了,但在 C:\ 或 D:\ 驱动器(D: 是第二个硬盘驱动器)等其他位置无法写入任何内容。
我最终发现 UWP 文件的访问与我过去使用 WPF 所做的不同,例如:https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions
例如,ApplicationData.Current.LocalFolder
将返回一个 StorageFolder
对象,其中包含 CreateFile
、GetItemsAsync
等方法。如果我想将用户数据保存在文件。请参阅https://docs.microsoft.com/fr-fr/uwp/api/windows.storage.storagefolder?view=winrt-19041 了解更多信息。
鉴于我存储用户数据的方式发生了重大变化,我将考虑在 sqlite 数据库上使用 EntityFrameworkCore: https://docs.microsoft.com/en-us/windows/uwp/data-access/sqlite-databases
我希望分享这次冒险可以帮助其他面临同样情况的人。
祝大家编码愉快!
【讨论】:
以上是关于运行 .NET Core 3.0 时未经授权访问 C:\Users的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在 Asp.Net CORE 中使用 JWT 获得 401 未经授权?