我目前正在使用以下代码在文档文件夹的子文件夹中编写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
。
问题出在哪里?
由于
答案 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