4

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

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

苹果的文档说:

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

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

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 还是我做错了什么?

4

2 回答 2

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
}
于 2013-03-06T10:52:21.783 回答
0

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

于 2016-06-15T17:00:24.667 回答