File.ReadAllText(): System.UnauthorizedAccessException: 'Access to the path is denied.'
File.ReadAllText(): System.UnauthorizedAccessException: 'Access to the path is denied.'
这是我遇到问题的代码片段:
public OpenPage(string filePath, int? index, object jobject)
{
InitializeComponent();
File.SetAttributes(filePath, FileAttributes.Normal); // Here is where error in title occurs
var readText = File.ReadAllText(filePath); // Also occurs here
DisplayAlert("Alert", readText, "Ok");
}
我正在创建一个 UWP Xamarin.Forms 应用程序,它需要从选定目录(C: 驱动器上的任何内容)读取文件。虽然当我不从本地缓存/AppData 中选择文件时标题中出现错误。
查看 Whosebug 中的其他类似 post(例如 Why is access to the path denied?)对于了解有关该主题的更多信息非常有用,尽管有关此错误的许多问题都已过时。
在上面的post中,有人说目录不能作为File.ReadAllText()的参数传递。
有什么解决办法吗?我需要访问 C: 驱动器上的文件。作为参考,我调试时构造函数中的filePath是“”C:\Users\ianpc\Desktop\config file clones\te0_ptt_wog.json”.
Is there any work around to this? I need access to files on the C: drive. For reference, the filePath in the constructor when I was debugging was ""C:\Users\ianpc\Desktop\config file clones\te0_ptt_wog.json".
问题是 UWP 应用程序在沙箱环境中运行,所以我们不能使用 System.IO
命名空间直接访问带有路径的文件。
对于 xamarin forms 应用程序,我们建议您使用 Windows 存储 api 通过路径访问文件,在此之前,您需要启用 broadFileSystemAccess
功能。
例如
public interface FileAccessInterface
{
Task<string> GetFileText(string filePath);
}
实施
[assembly: Dependency(typeof(FileAccessInterfaceImplementation))]
namespace XamarinPicker.UWP
{
public class FileAccessInterfaceImplementation : FileAccessInterface
{
public async Task<string> GetFileText(string filePath)
{
var stringContent = "";
try
{
var file = await StorageFile.GetFileFromPathAsync(filePath);
if (file != null)
{
stringContent = await Windows.Storage.FileIO.ReadTextAsync(file,Windows.Storage.Streams.UnicodeEncoding.Utf8);
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
return stringContent;
}
}
}
用法
var text = await DependencyService.Get<FileAccessInterface>().GetFileText(@"C:\Users\xxxx\Desktop\test.txt");
更多请参考本案例。
这是我遇到问题的代码片段:
public OpenPage(string filePath, int? index, object jobject)
{
InitializeComponent();
File.SetAttributes(filePath, FileAttributes.Normal); // Here is where error in title occurs
var readText = File.ReadAllText(filePath); // Also occurs here
DisplayAlert("Alert", readText, "Ok");
}
我正在创建一个 UWP Xamarin.Forms 应用程序,它需要从选定目录(C: 驱动器上的任何内容)读取文件。虽然当我不从本地缓存/AppData 中选择文件时标题中出现错误。
查看 Whosebug 中的其他类似 post(例如 Why is access to the path denied?)对于了解有关该主题的更多信息非常有用,尽管有关此错误的许多问题都已过时。
在上面的post中,有人说目录不能作为File.ReadAllText()的参数传递。
有什么解决办法吗?我需要访问 C: 驱动器上的文件。作为参考,我调试时构造函数中的filePath是“”C:\Users\ianpc\Desktop\config file clones\te0_ptt_wog.json”.
Is there any work around to this? I need access to files on the C: drive. For reference, the filePath in the constructor when I was debugging was ""C:\Users\ianpc\Desktop\config file clones\te0_ptt_wog.json".
问题是 UWP 应用程序在沙箱环境中运行,所以我们不能使用 System.IO
命名空间直接访问带有路径的文件。
对于 xamarin forms 应用程序,我们建议您使用 Windows 存储 api 通过路径访问文件,在此之前,您需要启用 broadFileSystemAccess
功能。
例如
public interface FileAccessInterface
{
Task<string> GetFileText(string filePath);
}
实施
[assembly: Dependency(typeof(FileAccessInterfaceImplementation))]
namespace XamarinPicker.UWP
{
public class FileAccessInterfaceImplementation : FileAccessInterface
{
public async Task<string> GetFileText(string filePath)
{
var stringContent = "";
try
{
var file = await StorageFile.GetFileFromPathAsync(filePath);
if (file != null)
{
stringContent = await Windows.Storage.FileIO.ReadTextAsync(file,Windows.Storage.Streams.UnicodeEncoding.Utf8);
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
return stringContent;
}
}
}
用法
var text = await DependencyService.Get<FileAccessInterface>().GetFileText(@"C:\Users\xxxx\Desktop\test.txt");
更多请参考本案例