File.WriteAllText System.UnauthorizedAccessException 在 Xamarin.forms 中使用 JSON 访问路径 'c:\mafirst.json' 被拒绝错误
File.WriteAllText System.UnauthorizedAccessException Access to the path 'c:\mafirst.json' is denied error in Xamarin.forms using JSON
我是 xamarin 的新手,我想从一个简单的 button_clicked 事件中将一些数据写入 json 文件。
这是我的代码:
`
JObject jsontry = new JObject(
new JProperty("newprop", "true"));
File.WriteAllText(@"c:\mafirst.json", jsontry.ToString());//this line gives the error
// write JSON directly to a file
using (StreamWriter file = File.CreateText(@"c:\Users\Flora\Desktop\mafirst.json"))//this line gives the same error as well
using (JsonTextWriter writer = new JsonTextWriter(file))
{
jsontry.WriteTo(writer);
}
`
错误:System.UnauthorizedAccessException:“访问路径 'c:\mafirst.json' 被拒绝。”
我尝试了不同的路径,在同一个项目中编写了相同的代码,但使用了不同的 .cs 文件,基本上我已经尝试了所有想到的想法和来自网络的解决方案,但没有任何效果。
编辑:
很抱歉缺少有关该应用程序的信息。这个应用程序对我来说只是一个学习项目。我 运行 这段代码只在 UWP 应用程序中,所以我把它当作一个 UWP 应用程序,我猜这是合乎逻辑的(?),这就是我使用像 (C:\Desktop\blabla.bla 这样的路径的唯一原因).
我 运行 visual studio 具有管理员权限,但这似乎不起作用,我只想将一些数据从我的 UWP 应用程序的 C# 代码写入并存储到 JSON 文件在本地。
感谢您的帮助。
“沙盒”中的 Xamarin 应用程序 运行:除非拥有权限,否则应用程序只能访问很少的内容,并且它们只能写入和读取为您的应用程序创建的文件夹(这样应用程序就不会弄乱与其他应用程序的files/data)。
对于应用程序沙箱内的文件存储,请查看(例如):
https://docs.microsoft.com/en-us/xamarin/android/platform/files/
您可以在指定路径的文件夹中写入文件(例如):
System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData)
返回的路径在 Windows、Android 和 iOS 上不同。最重要的是:你可以访问它。
请注意,您可以选择多个 Environment.SpecialFolder
枚举值。
对于文件路径,您可以使用:
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "somefile.txt");
我在 UWP 和 Android 的共享项目中经常使用 Environment.SpecialFolder.LocalApplicationData
。
最初,您使用的路径 c:\Users\Flora\Desktop\mafirst.json
在您的 PC 上。
当您使用 Xamarin.Forms 时,您可以将此路径用于 UWP。但是对于 Android 和 ios,你不能。
在 UWP 上,当你想在桌面上读取或写入文件时,你可以设置功能。
在 UWP 的 Package.appxmanifest
中添加如下 broadFileSystemAccess
。
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
.............
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>
</Package>
然后部署应用,在应用设置中开启文件系统权限。
使用StorageFolder
获取文件夹,如果文件不存在则创建文件。并且需要依赖服务来完成。
在Xamarin.Forms中创建接口:
public interface IFileManager
{
void WriteFile();
}
UWP 中的实现:
[assembly: Dependency(typeof(FileManager))]
namespace XFUWPFileSystem.UWP
{
public class FileManager : IFileManager
{
public async void WriteFile()
{
JObject jsontry = new JObject(
new JProperty("newprop", "true"));
var folder = await StorageFolder.GetFolderFromPathAsync(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));//Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData
StorageFile sampleFile = await folder.CreateFileAsync("mafirst.json", CreationCollisionOption.OpenIfExists);
await Windows.Storage.FileIO.WriteTextAsync(sampleFile, jsontry.ToString());
}
}
}
您可以查看下面关于 Locations that UWP apps can access
的 link:https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions
我是 xamarin 的新手,我想从一个简单的 button_clicked 事件中将一些数据写入 json 文件。
这是我的代码: `
JObject jsontry = new JObject(
new JProperty("newprop", "true"));
File.WriteAllText(@"c:\mafirst.json", jsontry.ToString());//this line gives the error
// write JSON directly to a file
using (StreamWriter file = File.CreateText(@"c:\Users\Flora\Desktop\mafirst.json"))//this line gives the same error as well
using (JsonTextWriter writer = new JsonTextWriter(file))
{
jsontry.WriteTo(writer);
}
`
错误:System.UnauthorizedAccessException:“访问路径 'c:\mafirst.json' 被拒绝。”
我尝试了不同的路径,在同一个项目中编写了相同的代码,但使用了不同的 .cs 文件,基本上我已经尝试了所有想到的想法和来自网络的解决方案,但没有任何效果。
编辑:
很抱歉缺少有关该应用程序的信息。这个应用程序对我来说只是一个学习项目。我 运行 这段代码只在 UWP 应用程序中,所以我把它当作一个 UWP 应用程序,我猜这是合乎逻辑的(?),这就是我使用像 (C:\Desktop\blabla.bla 这样的路径的唯一原因).
我 运行 visual studio 具有管理员权限,但这似乎不起作用,我只想将一些数据从我的 UWP 应用程序的 C# 代码写入并存储到 JSON 文件在本地。
感谢您的帮助。
“沙盒”中的 Xamarin 应用程序 运行:除非拥有权限,否则应用程序只能访问很少的内容,并且它们只能写入和读取为您的应用程序创建的文件夹(这样应用程序就不会弄乱与其他应用程序的files/data)。
对于应用程序沙箱内的文件存储,请查看(例如):
https://docs.microsoft.com/en-us/xamarin/android/platform/files/
您可以在指定路径的文件夹中写入文件(例如):
System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData)
返回的路径在 Windows、Android 和 iOS 上不同。最重要的是:你可以访问它。
请注意,您可以选择多个 Environment.SpecialFolder
枚举值。
对于文件路径,您可以使用:
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "somefile.txt");
我在 UWP 和 Android 的共享项目中经常使用 Environment.SpecialFolder.LocalApplicationData
。
最初,您使用的路径 c:\Users\Flora\Desktop\mafirst.json
在您的 PC 上。
当您使用 Xamarin.Forms 时,您可以将此路径用于 UWP。但是对于 Android 和 ios,你不能。
在 UWP 上,当你想在桌面上读取或写入文件时,你可以设置功能。
在 UWP 的 Package.appxmanifest
中添加如下 broadFileSystemAccess
。
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
.............
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>
</Package>
然后部署应用,在应用设置中开启文件系统权限。
使用StorageFolder
获取文件夹,如果文件不存在则创建文件。并且需要依赖服务来完成。
在Xamarin.Forms中创建接口:
public interface IFileManager
{
void WriteFile();
}
UWP 中的实现:
[assembly: Dependency(typeof(FileManager))]
namespace XFUWPFileSystem.UWP
{
public class FileManager : IFileManager
{
public async void WriteFile()
{
JObject jsontry = new JObject(
new JProperty("newprop", "true"));
var folder = await StorageFolder.GetFolderFromPathAsync(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));//Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData
StorageFile sampleFile = await folder.CreateFileAsync("mafirst.json", CreationCollisionOption.OpenIfExists);
await Windows.Storage.FileIO.WriteTextAsync(sampleFile, jsontry.ToString());
}
}
}
您可以查看下面关于 Locations that UWP apps can access
的 link:https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions