为啥我在 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 中异步发送请求时,为啥我的数据会损坏?