为啥我在 iOS 设备上尝试读取已发送到我的应用程序的文件时,在 OpenUrl 函数中出现权限错误?

Posted

技术标签:

【中文标题】为啥我在 iOS 设备上尝试读取已发送到我的应用程序的文件时,在 OpenUrl 函数中出现权限错误?【英文标题】:Why do I get a permission error in the OpenUrl function on an iOS device when trying to read in the file that has been sent to my app?为什么我在 iOS 设备上尝试读取已发送到我的应用程序的文件时,在 OpenUrl 函数中出现权限错误? 【发布时间】:2017-01-19 04:34:21 【问题描述】:

我有我的 Info.plist 文件设置来处理我想要的文件类型。当我在 Safari 中下载文件并从 Open In 中选择我的应用程序时,文件确实会发送到我的应用程序并调用 OpenUrl 函数。在模拟器中,我可以使用 FileStream 打开文件并毫无问题地处理它。在真实设备上,我收到一条错误消息,如下所示: 拒绝访问路径“/private/var/mobile/Containers/Data/Application/KEY/Documents/Inbox/file.ext。

这是我的 OpenUrl 函数:

public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)
    
        try
        
            System.Console.WriteLine("OpenURL");
            var fileName = url.AbsoluteUrl.LastPathComponent;
            var newPath = Path.Combine(bookStorage, fileName);

            var input = new System.IO.FileStream(url.Path, FileMode.Open);
            var output = new System.IO.FileStream(newPath, FileMode.Create);
            input.CopyTo(output);
            output.Close();
            input.Close();
            var epub = new EpubParser(bookStorage, fileName);
            var publication = new Publication(epub.getTitle(), fileName);
            var id = epub.getId();
            if (id != null)
            
                publication.Id = id;
            
            publication.Picture = epub.getImage();
            var publications = new Publications();
            publications.AddPublication(publication);

            return true;
        
        catch (Exception e)
        
            var navController = (UINavigationController)this.Window.RootViewController;
            var controller = navController.ViewControllers[0];
            AlertView.Show(e.Message, controller);
            return false;
        

    

【问题讨论】:

【参考方案1】:

基本上我想要的只是将文件复制到另一个位置以保存它。所以我改用 File.Copy 并且它起作用了!显然,即使只设置了打开权限,FileStream 仍然需要对文件夹进行某种类型的写访问。

var fileName = url.AbsoluteUrl.LastPathComponent;
var newPath = Path.Combine(bookStorage, fileName);
File.Copy(url.Path, newPath);

【讨论】:

另外,我只在 Stream 上设置了 FileMode 属性,而不是 FileAccess

以上是关于为啥我在 iOS 设备上尝试读取已发送到我的应用程序的文件时,在 OpenUrl 函数中出现权限错误?的主要内容,如果未能解决你的问题,请参考以下文章

当我在 iOS 的目标 c 中异步发送请求时,为啥我的数据会损坏?

为啥我无法在 Android 设备上接收来自 GCM 的消息

为啥蓝牙 LE 不能从 iOS 模拟器到我的设备工作?

为啥我在设备或模拟器上运行我的应用程序时屏幕是黑色的

从我的 PHP 服务器发送 Amazon SNS

通过cURL / PHP发送时,设备上未收到Firebase通知