File.ReadAllText(): System.UnauthorizedAccessException: '访问路径被拒绝。'

Posted

技术标签:

【中文标题】File.ReadAllText(): System.UnauthorizedAccessException: \'访问路径被拒绝。\'【英文标题】:File.ReadAllText(): System.UnauthorizedAccessException: 'Access to the path is denied.'File.ReadAllText(): System.UnauthorizedAccessException: '访问路径被拒绝。' 【发布时间】:2021-06-19 10:17:13 【问题描述】:

这是我遇到问题的代码的 sn-p:

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 中选择文件时,标题中出现错误。

查看 *** 中的其他类似帖子(例如 Why is access to the path denied?)非常有助于了解有关该主题的更多信息,尽管有关此错误的许多问题都已过时。

在上面的帖子中,有人说不能将目录作为 File.ReadAllText() 的参数传递。

有什么解决办法吗?我需要访问 C: 驱动器上的文件。作为参考,我调试时构造函数中的filePath是“C:\Users\ianpc\Desktop\config file clones\te0_ptt_wog.json”。

【问题讨论】:

***.com/questions/33082835/… 【参考方案1】:

有什么解决办法吗?我需要访问 C: 驱动器上的文件。作为参考,我调试时构造函数中的filePath是“C:\Users\ianpc\Desktop\config file clones\te0_ptt_wog.json”。

问题是UWP应用运行在沙盒环境中,所以我们不能使用System.IO命名空间直接访问带路径的文件。

对于 xamarin 表单应用,我们建议您使用 Windows Storage 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");

更多信息请参考此案例reply。

【讨论】:

我会试试这个实现;非常感谢您提供的信息! 我实际上收到一个错误:“IAsyncOperation”不包含“GetAwaiter”的定义,并且没有扩展方法“GetAwaiter”接受“IAsyncOperation”类型的第一个参数可以找到(您是否缺少“系统”的 using 指令?)。虽然在我的文件顶部我有一个 using System 语句。我会在其他帖子上研究这个问题,但如果你有解决这个问题的方法,那将非常有用! 您似乎错过了System.Runtime.WindowsRuntime.dll 库,请参考此document 并手动添加。

以上是关于File.ReadAllText(): System.UnauthorizedAccessException: '访问路径被拒绝。'的主要内容,如果未能解决你的问题,请参考以下文章

File.ReadAllText 中的字符无效

关于File.ReadAllText Method (String)

文件操作

C#中,怎么使用富文本框控件显示一个文件的内容

Xamarin 读取共享项目中的文件

ERROR: “System.Web.Mvc.Controller.File(string, string, string)”是一个“方法”