尝试将json文件写入应用程序目录时,UWP“拒绝访问路径'...'”

时间:2018-08-22 07:25:57

标签: c# uwp

我是UWP的新手,但是很长时间以来我一直在使用C#(桌面应用程序等)。我最近像往常一样尝试在app目录中写入json文件,并收到以下消息:

Access to the path 'C:\...\setting.json' is denied

这是我使用的代码:

File.WriteAllText(Path.Combine(Directory.GetCurrentDirectory(), "setting.json"), JsonConvert.SerializeObject(Settings));

尽管那很奇怪,所以我做了一些研究。看来应用程序目录是只读的。我尝试将属性设置为“普通”,仍然是相同的错误。我尝试过使用StorageFolder和StorageFile,但仍然是相同的消息。有什么方法可以使文件夹不是只读的?这在WPF应用程序中效果很好...

2 个答案:

答案 0 :(得分:0)

问题是您尚未在Package.appxmanifest文件中声明broadFileSystemAccess功能。并且broadFileSystemAccess允许用户有权访问的所有文件。例如:文档,图片,照片,下载,桌面,OneDrive等。

<Package
  ...
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp uap5 rescap">
...
<Capabilities>
    <rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>

请注意,除了指定功能之外,还必须添加rescap命名空间,并且还应将其添加到gnorableNamespaces

答案 1 :(得分:0)

这是我记录应用内部文件的方式:

Windows.Storage.ApplicationDataContainer roamingSettings;
Windows.Storage.StorageFolder roamingFolder;
string donnees = Newtonsoft.Json.JsonConvert.SerializeObject(anobject);
if (UseRoaming)
{
    roamingFolder = Windows.Storage.ApplicationData.Current.RoamingFolder;
    roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
}
else
{
    roamingFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
    roamingSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
}
StorageFile sampleFile = await roamingFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);

using (IRandomAccessStream textStream = await sampleFile.OpenAsync(FileAccessMode.ReadWrite))
{
    using (DataWriter textWriter = new DataWriter(textStream))
    {
        textWriter.WriteString(donnees);
        await textWriter.StoreAsync();
    }
}

希望这会有所帮助