错误域= NSCocoaErrorDomain代码= 512“操作无法完成。操作无法完成。是一个目录

我想使用writeToFile来存储一个图片的文件,但find下面的错误,如何解决它?

错误域= NSCocoaErrorDomain代码= 512“操作无法完成。(cocoa错误512.)”{NSFilePath = /用户/ alexqdh /图书馆/应用程序支持/ iPhone模拟器/ 6.0 /应用程序/ xxx /文件/ girl.png ,NSUnderlyingError = 0x753e630“操作无法完成,是一个目录”}

-(NSString*)getImagePath:(NSString *)name { NSArray *path =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docPath = [path objectAtIndex:0]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *finalPath = [docPath stringByAppendingPathComponent:name]; [fileManager createDirectoryAtPath:finalPath withIntermediateDirectories:YES attributes:nil error:nil]; return finalPath; } //below is how to use NSData writeToFile AFImageRequestOperation *opera = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { img.image = image; [self.view addSubview:img]; NSData *imageData = UIImagePNGRepresentation(img.image); if(imageData == nil) { NSLog(@"imageData nil"); } NSString *picPath = [self getImagePath:@"girl.png"]; NSLog(@"path:%@",picPath); NSError *error = [[NSError alloc]init]; BOOL a = [imageData writeToFile:picPath options:NSDataWritingAtomic error:&error]; if(a == YES) { NSLog(@"YES"); } else { NSLog(@"NO.error:%@", error); } /*NSData *imageData = UIImagePNGRepresentation(img.image); NSString *picPath = [self getImagePath:@"girl.png"]; [imageData writeToFile:picPath atomically:YES];*/ NSLog(@"Got it.code:%d",response.statusCode); } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { NSLog(@"Failed pic.error:%@",error); }]; [opera start]; 

这个问题是由于创build一个具有图像名称的目录,然后尝试写入一个文件来代替该目录。 换句话说,你首先要创build一个名为:

文件/ girl.png /

那么你试图写一个文件到path:

文件/ girl.png

显然这不是你要做的。 在你的getImagePath:方法中,摆脱创build目录的调用。 Documents目录已经存在。 当然,你不需要一个与文件名相对应的目录。

另一个select是将您的getImagePath:更改为:

 - (NSString*)getImagePath:(NSString *)name { NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docPath = [path objectAtIndex:0]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *finalPath = [docPath stringByAppendingPathComponent:name]; // Remove the filename and create the remaining path [fileManager createDirectoryAtPath:[finalPath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil]; return finalPath; } 

这个更新的代码现在支持你传入包含你可能想要的子目录的name值。