NSData:writeToFile返回错误"文件不存在"

时间:2016-05-24 21:04:26

标签: ios objective-c

我目前正在使用以下代码在文档文件夹的子文件夹中编写NSData。

NSData* dataToSave=...;
NSFileManager* fileManager = [NSFileManager defaultManager];
NSString* documentsDir=[
    NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) 
    objectAtIndex:0];
NSString* desiredFolder=[documentsDir stringByAppendingPathComponent:@"MySubfolder"];
BOOL isDir;

if (![fileManager fileExistsAtPath:desiredFolder isDirectory:&isDir]&&!isDir)
{
    NSError* error;
    [fileManager createDirectoryAtPath:desiredFolder 
         withIntermediateDirectories:NO attributes:nil error:&error];
    if (error) {
        NSLog(@"Error%@", error.localizedDescription);
    }
}     
NSString* desiredFile=[desiredFolder stringByAppendingPathComponent:@"mfile.jpeg"];
if (![dataToSave writeToFile:desiredFile options:NSDataWritingAtomic error:&error])
{
    NSLog(@"Error %@",error.localizedDescription);
    return NO;
}

直到我在"发布模式"中测试此配置一直工作。 。 NSData:writeToFile开始返回NO,错误为:The file 'myfile.jpeg´ doesn't exist

问题出在哪里?

由于

2 个答案:

答案 0 :(得分:1)

感谢@mbi我找到了答案。

问题在于验证父文件夹是否存在:

if (![fileManager fileExistsAtPath:desiredFolder isDirectory:&isDir]&&!isDir)

这是不正确的。由于isDirectory参数不安全,isDir即使方法的结果为NO也可以为真。所以评估的正确方法就是:

if (![fileManager fileExistsAtPath:desiredFolder isDirectory:nil])

或者,如果您想处理文件存在但不是目录的情况:

if (![fileManager fileExistsAtPath:desiredFolder isDirectory:&isDir]){
...
}else if(!isDir) {
...
}

答案 1 :(得分:0)

尝试这种方法。

SYSTEM