NSData datawithcontentsoffile返回null

时间:2014-06-02 11:19:15

标签: ios objective-c nsdata

我有以下代码从iphone的文档目录中获取文件:

NSString *docsDir;
NSString *realpath;
NSArray *dirPaths;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];

realpath=[[NSString alloc] initWithString:
          [docsDir stringByAppendingPathComponent: @"2_program.db"]];
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: realpath ] == YES)
{
    NSLog(@"find file");
    NSData *uploadedData=[NSData dataWithContentsOfFile:realpath];
    NSString * uploadedDataBase64= [NSString base64forData:uploadedData];
    NSLog(@"base64: %@",uploadedDataBase64);
}
else
{
    NSLog(@"not found");
}

filemanager找到该文件,但nsdata返回null,但是它们都有相同的路径

我的文件大小约为60kb

任何想法为什么会发生?我错过了什么吗?

3 个答案:

答案 0 :(得分:0)

你在这里写的代码看起来不错, 我建议你选择其他需要NSError实例的方法。

               `dataWithContentsOfFile:options:error:`

如果出现问题,您将尝试将该文件内容转换为NSData,那么您仍会得到一些错误说明,错误说明可能会对您有所帮助。

我希望它对你有帮助......欢呼

答案 1 :(得分:0)

尝试使用Matt Gallagher的this伟大的NSData + Base64类别以及下面的代码

    NSString *realpath=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent: @"2_program.db"];
if ([[NSFileManager defaultManager] fileExistsAtPath:realpath]){
    NSLog(@"find file");
    NSData *uploadedData=[NSData dataWithContentsOfFile:realpath];
    NSString *uploadedDataBase64=[[[NSString alloc]initWithData:uploadedData encoding:NSUTF8StringEncoding] base64EncodedString];
    NSLog(@"base64: %@",uploadedDataBase64);
}
else{
    NSLog(@"not found");
}

答案 2 :(得分:-1)

realpath=[[NSString alloc] initWithString:
      [docsDir stringByAppendingPathComponent: @"2_program.db"]];

这里你错过了一个/ 将上述陈述改为

realpath = [[NSString alloc] initWithString:
      [docsDir stringByAppendingPathComponent: @"/2_program.db"]];