我发现到目前为止,发送到application:openURL:sourceApplication:annotation:
的路径是:
file://localhost/private/var/mobile/Applications/<GUID>/Documents/Inbox/file
为了检查我即将执行的文件系统操作是否确实有可能成功(并且给我的url不是沙箱之外的位置),我似乎必须这样做:
NSString* hdurl = [[@"file://localhost/private" stringByAppendingString:NSHomeDirectory()] stringByAppendingString: @"/"];
NSString* path = url.absoluteString;
if ([path hasPrefix:hdurl]) {
// now ready to e.g. call fopen on: [path substringFromIndex:@"file://localhost".length]
现在,我似乎模糊地回忆起(这可能是错误的),在过去我看到过使用file:///
风格的URL。这显然会导致此代码失败。
我怎么知道它总是给我一个file://localhost
URL前缀?
奇怪的是,苹果关于URL的文档中缺少一个关于文件URL的部分。
指向本地文件系统上的文件的NSURL
称为"文件URL"。要将NSURL
转换为代表文件路径的NSString
,请使用:
NSString *filePath = [url path];
要检查NSURL
是否代表文件URL,请使用:
BOOL isFileURL = [url isFileURL];
请记住,如果您的应用程序被传递了一个文件URL,您将始终可以访问该文件。没有必要检查它是否以任何前缀开头。为什么iOS会给你一个你无法访问的文件?