You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI iOS从选定目录复制文件遇权限拒绝问题求助

解决iOS真机访问选定目录权限被拒的问题

问题原因

iOS真机的沙盒机制比模拟器严格得多,直接通过文件路径调用Directory.GetFiles访问系统目录会被系统拦截,返回权限拒绝错误——模拟器因为是调试环境,权限限制宽松所以不会触发这个问题。另外,FolderPicker返回的IFolder对象本身已经带有系统授予的访问权限,直接用路径绕开这个对象去访问,就会失去权限验证。

解决步骤

  1. 改用IFolder的内置API获取文件
    不要用Directory.GetFiles,直接用result.Folder对象的异步方法来获取文件列表,示例代码如下:

    var result = await FolderPicker.Default.PickAsync(cancellationToken);
    
    if (result.IsSuccessful)
    {
        // 直接用IFolder的API获取文件,不要用Path
        var files = await result.Folder.GetFilesAsync();
        // 遍历文件处理(示例:复制到应用目录)
        var appFolder = FileSystem.Current.AppDataDirectory;
        foreach (var file in files)
        {
            var targetPath = Path.Combine(appFolder, file.Name);
            await file.CopyAsync(targetPath, overwrite: true);
        }
    }
    
  2. 配置info.plist权限描述
    必须在iOS项目的Info.plist中添加对应的隐私权限描述,否则系统会拒绝权限请求。根据你选择的目录类型,添加对应的键值对:

    • 选择文档目录:添加NSDocumentFolderUsageDescription,值为向用户说明的权限用途(比如"需要访问文档目录以复制文件")
    • 选择相册/媒体目录:添加NSPhotoLibraryUsageDescription和NSPhotoLibraryAddUsageDescription,说明用途
    • 选择下载目录:添加NSDownloadsFolderUsageDescription,说明用途

    配置方式:在Info.plist中右键选择"Add Row",输入对应的键,然后填写描述文本。

关键注意点

iOS中,通过文件选择器获取的目录/文件,必须通过IFolder/IFile对象来操作,不能直接用文件路径调用传统的System.IO类方法,否则会触发沙盒权限拦截。

内容的提问来源于stack exchange,提问作者soniko62

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:19:53