检查文件是否存在于URL而不是path

如何检查文件是否存在于URL(而不是path)中,以便将预先填充的默认存储设置到iPhone Simulator中:

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Food.sqlite"]; /* Set up the store. For the sake of illustration, provide a pre-populated default store. */ NSFileManager *fileManager = [NSFileManager defaultManager]; // If the expected store doesn't exist, copy the default store. if (![fileManager fileExistsAtPath:storePath]) { NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"Food" ofType:@"sqlite"]; if (defaultStorePath) { [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL]; } } 

我已经阅读了最近版本的模板,applicationDocumentsDirectory方法返回一个URL,所以我改变了代码来使用NSURL对象来表示文件path。 但在[fileManager fileExistsAtPath:storePath] ,我需要将fileExistsAtPath更改为像fileExistsAtURL (显然它不存在)。

我已经检查了NSFileManager类参考,我没有find适合我的目的的任何合适的任务。

有什么提示吗?

 if (![fileManager fileExistsAtPath:[storeURL path]]) ... 

从文档 :

如果这个URL对象包含一个文件URL(由isFileURL决定),则这个方法的返回值适合inputNSFileManager或NSPathUtilities的方法。 如果path中有斜线,则将其剥离。

对于文件系统URL, NSURL本身有一个方法来检查URL的可达性

 NSError *error; NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Food.sqlite"]; if ([storeURL checkResourceIsReachableAndReturnError:&error]) { // do something } else { NSLog(@"%@", error); } 
 if (![fileManager fileExistsAtPath:[storeURL path]]) 

是好的,但是很好看:像这样的url:

 ..../Documents/1158a3c96ca22c41b8e731b1d1af0e1e?d=mm&s=50 

[storeURL path]会给你的path(它适用于[storeURL lastPathComponent]

 ..../Documents/1158a3c96ca22c41b8e731b1d1af0e1e 

但是如果在/var/mobile/Applications/DB92F4DC-49E4-4B4A-8271-6A9DAE6963BC/Documents/1158a3c96ca22c41b8e731b1d1af0e1e?d=mm&s=50这样的string上使用lastPathComponent,它会给你1158a3c96ca22c41b8e731b1d1af0e1e?d=mm&s=50

这很好,因为在一个url,“? 用于GET参数,但是如果与string混合,可能会遇到麻烦。