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的主要内容,如果未能解决你的问题,请参考以下文章

wps保存的文件在哪里

将 CFReadStreamRef 转换/转换为 NSInputStream (iOS5)

坚持使用hasSpaceAvailable并且无法从NSInputStream中读取

通过 NSInputStream 和 NSOutputStream 进行视频流

Airflow 中文文档:写日志

将文件加载到应用程序本地存储