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

问题描述:

我想使用writeToFile将pic图像存储到文档,但找到下面的错误,解决它?错误域= NSCocoaErrorDomain代码= 512“操作无法完成。操作无法完成。是一个目录

错误域= NSCocoaErrorDomain代码= 512“该操作无法完成。 (Cocoa error 512.)“{NSFilePath =/Users/alexqdh/Library/Application Support/iPhone Simulator/6.0/Applications/xxx/Documents/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]; 
+0

你是怎么知道这段代码出错的? – Josh

的问题是通过创建与图像的名称的目录,然后试图写到位目录的文件引起的。换句话说,你首先创建一个目录命名为:

文件/ girl.png/

然后尝试写入文件的路径:

Documents/girl.png

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

一个选项是改变你的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值,其中包括你可能想传递的子目录。

+0

Thx非常。我知道了。 :) – alexqinbj