UWP Directory.CreateDirectory 中的 UnauthorizedAccessException

Posted

技术标签:

【中文标题】UWP Directory.CreateDirectory 中的 UnauthorizedAccessException【英文标题】:UnauthorizedAccessException in UWP Directory.CreateDirectory 【发布时间】:2021-05-07 10:49:24 【问题描述】:

这是一个构建到 Hololens 2 的 Unity 项目。我正在尝试在 Application.PersistentDataPath 中创建一个新文件夹,但由于 UnauthorizedAccessException 而失败。奇怪的是它一直在工作,直到最近才停止了看似无关的更改。

这是失败的函数。

        static DirectoryInfo EnsureDirectory(string subFolder)
           
            Debug.Log($"starting EnsureDirectory() for subFolder.");
            
            string directoryPath = Path.Combine(Application.persistentDataPath, subFolder.ValidatePath());
            
            Debug.Log($"About to create directory directoryPath");
            var dir = Directory.CreateDirectory(directoryPath);
            Debug.Log($"Successfully created directory dir.FullName");
            
            return dir;
        

在 Directory.CreateDirectory 我收到如下错误: Hololens screenshot of debug log

EXCEPTION: UnauthorizedAccessException: Access to the path "C:\" is denied.

此错误仅在部署到设备时发生。在 Unity 编辑器中,它可以完美运行。我也不知道为什么当那不是我想要使用的路径时它会说“C:”。

任何帮助将不胜感激。

【问题讨论】:

这可能是因为它检查每个路径段,从第一个根目录开始,显然是禁止的。试试new DirectoryInfo(Application.persistentDataPath).CreateSubdirectory(...); 看看错误是否消失。 subFolder.ValidatePath() 是做什么的?并且directoryPath 已经错了...xxxxxxxxx/LocalState 本身已经持久数据路径...您实际上会在其中创建一个子文件夹...您以@ 的形式传入什么987654328@?好像是空字符串…… @derHugo 验证路径只是删除无效字符。有时 subFolder 是空的,在这种情况下,我直接在持久数据路径中创建文件。当该字符串不为空时,它会创建一个新的子文件夹。如果文件夹已经存在,createdirectory 什么也不做。这一切都在编辑器中工作 在编辑器中,您有权在应用程序“沙盒”之外创建文件和文件夹 .. 在 HoloLens 上您没有;)我只能从您的屏幕截图和日志中看到文件名本身似乎是空的,因为它记录了例如ValidatePath() with .. 后面什么都没有 DirectoryInfo(Application.persistentDataPath).CreateSubdirectory(...);对我不起作用,同样的错误 【参考方案1】:

感谢@aybe 的回答。

这可能是因为它检查每个路径段,开始 第一个是根目录,显然是被禁止的。尝试新的 DirectoryInfo(Application.persistentDataPath).CreateSubdirectory(...); 而是查看错误是否消失

【讨论】:

以上是关于UWP Directory.CreateDirectory 中的 UnauthorizedAccessException的主要内容,如果未能解决你的问题,请参考以下文章

2019-11-25-加强版在国内分发-UWP-应用正确方式-通过win32安装UWP应用

为啥必须在 UWP 中使用 StreamSocketListener 而不是 TcpListener,尽管 UWP 是 .NET Core 的子集,而 TcpListener 在 UWP 中可用?

UWP使用AppService向另一个UWP客户端应用程序提供服务

[UWP]涨姿势UWP源码——IsolatedStorage

win10 uwp 如何开始写 uwp 程序

起调UWP的几种方法