检查 IOS 中文档目录的子目录时出错
Error checking for subdirectory of Documents directory in IOS
我的应用程序需要创建 Documents 目录的子目录。 returns 目录 URL 下面的代码。第一次通过它创建目录,但下次失败,因为 fileExistsAtPath: 声称目录仍然不存在。我知道它存在,因为我已经将捆绑包设置为使文件在 iTunes 中可见,并且我可以在 iTunes 中看到它。知道我做错了什么吗?
- (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
- (NSURL *)applicationSubDirectory
{
NSFileManager *manager = [NSFileManager defaultManager];
NSURL *docDir = [self applicationDocumentsDirectory];
docDir = [docDir URLByAppendingPathComponent:@"Sub" isDirectory:YES];
NSString *docDirPath = [docDir absoluteString];
BOOL isFolder = YES;
if(!([manager fileExistsAtPath:docDirPath isDirectory:&isFolder] && isFolder)) {
NSError *error = nil;
BOOL ret = [manager createDirectoryAtURL:docDir withIntermediateDirectories:NO attributes:nil error:&error];
if(!ret) {
NSLog(@"ERROR app support: %@", error);
abort();
}
}
return docDir;
}
您想使用 path
而不是 absoluteString
前者 returns 完整 url 绝对路径,类似于 "file:///..." 而后者仅 returns 文件路径。
NSString *docDirPath = [docDir path];
因此,由于您要查找的文件的路径 "file:///...." 永远不会存在,因此检查总是失败。当你去创建目录时,你用URL创建它,所以它有效。
我的应用程序需要创建 Documents 目录的子目录。 returns 目录 URL 下面的代码。第一次通过它创建目录,但下次失败,因为 fileExistsAtPath: 声称目录仍然不存在。我知道它存在,因为我已经将捆绑包设置为使文件在 iTunes 中可见,并且我可以在 iTunes 中看到它。知道我做错了什么吗?
- (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
- (NSURL *)applicationSubDirectory
{
NSFileManager *manager = [NSFileManager defaultManager];
NSURL *docDir = [self applicationDocumentsDirectory];
docDir = [docDir URLByAppendingPathComponent:@"Sub" isDirectory:YES];
NSString *docDirPath = [docDir absoluteString];
BOOL isFolder = YES;
if(!([manager fileExistsAtPath:docDirPath isDirectory:&isFolder] && isFolder)) {
NSError *error = nil;
BOOL ret = [manager createDirectoryAtURL:docDir withIntermediateDirectories:NO attributes:nil error:&error];
if(!ret) {
NSLog(@"ERROR app support: %@", error);
abort();
}
}
return docDir;
}
您想使用 path
而不是 absoluteString
前者 returns 完整 url 绝对路径,类似于 "file:///..." 而后者仅 returns 文件路径。
NSString *docDirPath = [docDir path];
因此,由于您要查找的文件的路径 "file:///...." 永远不会存在,因此检查总是失败。当你去创建目录时,你用URL创建它,所以它有效。