使用NSURL测试文件是否存在

Pet*_*sey 70 cocoa nsurl core-foundation nsfilemanager osx-snow-leopard

Snow Leopard引入了许多新方法来使用NSURL对象来引用文件,而不是路径名或Core Services的FSRef.

但是,有一项任务我找不到基于URL的方法:测试文件是否存在.我正在寻找基于URL的版本- [NSFileManager fileExistsAtPath:].与该方法一样,YES如果URL描述任何内容,它应该返回,无论是常规文件,目录还是其他任何内容.

我可以尝试查找各种资源值,但是如果文件没有,则没有明确保证它们不存在,并且其中一些(例如,NSURLEffectiveIconKey)可能成本很高.

我可以使用NSFileManager fileExistsAtPath:,但如果有更现代的方法,我宁愿使用它.

Cocoa,CF或Core Services中是否有一个简单的方法或函数可以保证/记录,告诉我给定的文件(或文件引用)URL是否指向存在的文件系统对象?

Eli*_*oij 138

NSURL确实有这种方法:

- (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error
Run Code Online (Sandbox Code Playgroud)

其中"返回是否可以访问文件URL指向的资源."

NSURL *theURL = [NSURL fileURLWithPath:@"/Users/elisevanlooij/nonexistingfile.php" 
               isDirectory:NO];
NSError *err;
if ([theURL checkResourceIsReachableAndReturnError:&err] == NO)
    [[NSAlert alertWithError:err] runModal];
Run Code Online (Sandbox Code Playgroud)

  • 另一个更新......它在iOS4中没有执行任何操作,尽管从iOS5.0开始,iPhone现在显然支持它 (19认同)
  • 好主人谁命名这个功能? (9认同)
  • 更新:从iOS 4开始提供. (4认同)
  • 对于任何被这个答案抛弃的iPhone OS开发人员:`checkResourceIsReachableAndReturnError:`仅在10.6及更高版本中可用,但在iPhone SDK中尚未提供. (3认同)
  • XCode 3.2.5(支持iOS 4.2)中的iOS文档声明:"此方法在iOS中未实现,因此不执行任何操作." (2认同)

小智 29

在iOS上我找不到任何其他方式......

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"file.type"];
if ([[NSFileManager defaultManager] fileExistsAtPath:[storeURL path]]) {...}
Run Code Online (Sandbox Code Playgroud)


Wil*_*ken 10

这是Swift 2的答案:

var error:NSError?
let folderExists = theURL.checkResourceIsReachableAndReturnError(&error)
Run Code Online (Sandbox Code Playgroud)