NSFileHandle writeData:exception处理

这可能是一个相当广泛的问题,但我找不到任何在线资源解决或解释此事。

问题是在创buildNSFileHandle *writer = [NSFileHandle fileHandleForWritingAtPath:"path"] ,当你使用[writer writedata:"NSData"] ,根据苹果文档可能会触发正弦可能的exception。

“如果文件描述符closures或无效,接收方表示未连接的pipe道或套接字端点,文件系统上没有剩余空间,或发生其他写入错误,则此方法会引发exception。 – 苹果DOC

我想知道的是,有什么办法可以处理或validation这些问题,而不必在写入之前使用任何try catch或检查条件检查中的每个错误。 任何可能的方式,我们可以使用NSError来处理这个?

我会说“不”。 如果您在写入之前find了涵盖所有可能失败的testing,那么没有什么可以说在这个初始testing之后写入操作可能会失败(考虑写入1KB空闲的文件系统,并且要写入4KB)。

因此,在@try/@catch块中将你的调用包装到这些方法中似乎是最好的方法。 这些包装可以然后返回一个NSError **如果你想知道失败的细节(你肯定应该这样做)。

 - (BOOL)writeData:(NSData *)data toFileHandle:(NSFileHandle *)fileHandler error:(NSError **)error { @try { [fileHandler writeData:data]; } @catch (NSException *e) { if (error != NULL) { NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : @"Failed to write data", // Other stuff? }; *error = [NSError errorWithDomain:@"MyStuff" code:123 userInfo:userInfo]; } return NO; } return YES; } 

你一定会想把失败的原因join到NSError ,但是对于我如何去做这件事并不是很明显。