NSInputStream 为存储在本地文档目录中的文件返回 nil
Posted
技术标签:
【中文标题】NSInputStream 为存储在本地文档目录中的文件返回 nil【英文标题】:NSInputStream returned nil for file stored in local documents directory 【发布时间】:2015-06-04 06:36:53 【问题描述】:我正在尝试解析下载的 CSV 文件的内容。该文件存储在本地文档目录的文件夹中。
文件路径:/Users/xyz/Library/Developer/CoreSimulator/Devices/C04089B6-4B9F-4F3A-A7C4-82225024CBE4/data/Containers/Data/Application/7412C7C6-71C7-47FE-810B-965116A6071C/Documents /rndftp/99999920150415152101.csv
我正在使用这种方法来创建一个 NSInputStream :
- (instancetype)initWithContentsOfDelimitedURL:(NSURL *)URL delimiter:(unichar)delimiter
NSInputStream *stream = [NSInputStream inputStreamWithURL:URL];
return [self initWithInputStream:stream usedEncoding:NULL delimiter:delimiter];
这里,URL 是 [NSURL URLWithString: filepath],但为此,stream 是 nil。
因此,它在这里崩溃了:
CHCSVParser *parser = [[CHCSVParser alloc] initWithContentsOfCSVURL:[NSURL URLWithString:filePath]];
[parser parse];
NSArray *latestFileComponentsArray = [NSArray arrayWithContentsOfCSVURL:[NSURL URLWithString:filePath]];
出现错误:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: stream'
可能的原因是什么?我正在使用 CHCSVParser 开源来解析 csv 文件。
【问题讨论】:
【参考方案1】:我的错,这里有一个小警告:如果文件是本地下载的,我们将 URL 指定为 fileURLwithPath: 而不是 URLWithString: ,因此可以纠正导致错误的代码如:
CHCSVParser *parser = [[CHCSVParser alloc] initWithContentsOfCSVURL:[NSURL fileURLWithPath:filePath]];
[parser parse];
NSArray *latestFileComponentsArray = [NSArray arrayWithContentsOfCSVURL:[NSURL fileURLWithPath:filePath]];
【讨论】:
以上是关于NSInputStream 为存储在本地文档目录中的文件返回 nil的主要内容,如果未能解决你的问题,请参考以下文章
将 CFReadStreamRef 转换/转换为 NSInputStream (iOS5)
坚持使用hasSpaceAvailable并且无法从NSInputStream中读取