NSFileManager的方法createDirectoryAtPath在iOS上返回false结果

时间:2013-03-06 10:40:34

标签: ios directory nsfilemanager create-directory

当我尝试使用下面的代码创建一个文件夹时,当我尝试创建一个已存在的文件夹而不是返回YES时,它返回NO并显示错误:

[[NSFileManager defaultManager] createDirectoryAtPath:[documentsPath stringByAppendingPathComponent:@"temp"] withIntermediateDirectories:NO attributes:nil error:&error];

Apple的documentation说:

Return Value
YES if the directory was created or already exists or NO if an error occurred.

所以我应该在成功或者文件夹存在时得到YES。但是当文件夹存在时我收到此消息:

Error Domain=NSCocoaErrorDomain Code=516 "The operation couldn’t be completed. (Cocoa error 516.)" UserInfo=0x200ef5f0 {NSFilePath=/var/mobile/Applications/DA657A0E-785D-49B4-9258-DF9EBAC5D52A/Documents/temp, NSUnderlyingError=0x200ef590 "The operation couldn’t be completed. File exists"}

这是一个错误,应该报告给Apple还是我做错了什么?

2 个答案:

答案 0 :(得分:3)

如果文件存在并且它不是目录,

[NSFileManager createDirectoryAtPath:withIntermediateDirectories:attributes:error:]将失败。

所以前进的方法是不打扰创建目录(如果它已经存在)并抛出异常(如果它存在且不是目录):

NSString *filename = [documentsPath stringByAppendingPathComponent:@"temp"];
NSFileManager *fileman = [NSFileManager defaultManager];
BOOL isDir = NO;
if (![fileman fileExistsAtPath:filename isDirectory:&isDir])
{
    // Create the directory
}
else if (!isDir)
{
    NSLog(@"Cannot proceed!");
    // Throw exception
}

答案 1 :(得分:0)

我认为您需要使用withIntermediateDirectories YES来获取Apple文档中的行为。