1

我发现到目前为止发送到的路径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://localhostURL 前缀?

Apple关于 URL 的文档奇怪地缺少关于文件 URL 的部分。

4

1 回答 1

1

NSURL指向本地文件系统上的文件的 称为“文件 URL” 。要将 转换NSURLNSString代表您使用的文件路径:

NSString *filePath = [url path];

要检查 an 是否NSURL代表文件 URL,请使用:

BOOL isFileURL = [url isFileURL];

请记住,如果您的应用程序传递了一个文件 URL,您将始终可以访问该文件。无需检查它是否以任何前缀开头。为什么 iOS 会向您传递您无权访问的文件?

于 2013-09-01T03:50:22.503 回答