C# 运行.NET Core 3.0时未经授权访问C:\Users

C# 运行.NET Core 3.0时未经授权访问C:\Users,c#,.net-core,settings,access-denied,C#,.net Core,Settings,Access Denied,我正在将一个库从.NET Framework迁移到.NET Core。在这个库中,我提供了一种将XML数据保存在用户的AppData文件夹中的方便方法 在.Net Core下运行时,我遇到一个异常: 对路径“C:\Users”的访问被拒绝 此时_userDataPath的值为: C:\Users\cedbo\AppData\Roaming\MyApp 这在.NET Framework下运行良好,因此不存在授权问题 // compute filepath _userDataPath = Path.

我正在将一个库从.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);
}
//计算文件路径
_userDataPath=Path.Combine(
GetFolderPath(Environment.SpecialFolder.ApplicationData),
appName);
_userDataFile=Path.Combine(_userDataPath,“UserData.xml”);
//加载数据或创建文件(如果需要)。
T userData=null;
如果(File.Exists(_userDataFile))/!!!即使文件存在,也返回false
{
userData=XmlTools.GetFromXml(_userDataFile);
}
其他的
{
userData=newt();
if(!Directory.Exists(_userDataPath))/!!!即使目录存在,也返回false
{
Directory.CreateDirectory(_userDataPath);//异常:对路径“C:\Users”的访问被拒绝。
}
SaveToXml(userData,_userDataFile);
}
如果.NET Core建议使用另一种标准方法,我准备使用另一种标准方法,但我没有发现任何关于此写访问限制的内容,也没有找到存储.NET Core中推荐的用户数据的其他方法

有人能给我建议吗

提前感谢您。

以下是我的发现:

我正试图从UWP应用程序运行此代码。我尝试过,但在其他位置,如C:\或D:\驱动器(D:是第二个硬盘驱动器)上都无法写入任何内容

我最终发现UWP文件的访问权限与我以前使用WPF时的访问权限不同,例如:

例如,
ApplicationData.Current.LocalFolder
将返回一个
StorageFolder
对象,该对象包含
CreateFile
GetItemsAsync
等方法。如果我想将用户数据保存在文件中,通常会将其存储在这个位置。有关更多信息,请参阅

鉴于我将存储用户数据的方式发生了实质性变化,我将考虑在SQLite数据库上使用EntyFraseWorkReo,而不是:

我希望分享这段经历能帮助其他面临同样情况的人


祝大家快乐

\u userDataPath
中的值是多少?看起来组合的路径几乎不正确。。。您能否硬编码XML文件的确切路径,以验证这确实是正确路径的访问问题?@CoolBots在调试模式下,我看到变量中的路径是正确的。这发生在谈论XML文件之前,它是在创建包含文件夹时发生的,任何内容都会进入其中。是否进行了其他检查:测试XML文件和包含文件夹是否存在不会崩溃,但即使这些元素实际存在,也会返回false。