检查文件是否存在于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混合,可能会遇到麻烦。