来自createFileAtPath的更详细错误?

时间:2009-12-07 13:45:20

标签: objective-c

无论如何从“createFileAtPath”获取更详细的错误数据我有点期待NSError吗?目前我正在使用BOOL返回值。

success = [fileMan createFileAtPath:fileOnDisk contents:dBuffer attributes:nil];
if(success == YES) NSLog(@"FileCreated");
else {
    NSLog(@"ERROR: Failed to create file");
    return 1;
}

加里

2 个答案:

答案 0 :(得分:54)

我同意......我希望有一个接受NSError的功能!

在这种情况下返回的错误通常是errno.h中声明的POSIX错误之一(errno会自动包含在Cocoa或Foundation标题中。)

要查看错误,请使用strerror中的errno.h函数并引用全局errno整数,该问题出现时由低级POSIX io函数设置:< / p>

if (![fm createFileAtPath:@"/etc/foobar.txt" contents:data attributes:nil]) 
{
    NSLog(@"Error was code: %d - message: %s", errno, strerror(errno));
}

// output will be: Error was code: 13 - message: Permission denied

错误代码常量列表列在Error Handling Programming Guide for Cocoa中(除了errno.h标题本身)。

答案 1 :(得分:9)

你不应该使用那种方法;他们忘了将它放在主文档(!)中,但如果您阅读Apple头文件,则会发现此评论:

  

/ *这里提供了这些方法以实现兼容性。相应的   返回NSErrors的NSData上的方法应该被认为是   从NSData创建文件或检索文件的主要方法   作为NSData的文件的内容。 * /

所以,相反,Apple希望你使用它(从测试开始,它看起来功能完全相同 - 除了它位于一个奇怪的类,你从来没有想过去寻找它(我想创建一个)空文件...所以我必须...实例化一个nil NSData对象?什么?)它有一个NSError对象):

https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSData_Class/Reference/Reference.html#//apple_ref/occ/instm/NSData/writeToFile:options:error