2014-06-02 5 views
3

У меня есть ниже код для получения файла из каталога документов iPhone в:NSData datawithcontentsoffile возвращает нуль

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"); 
} 

файлменеджер находит файл, но NSData возвращает NULL, однако оба они получили тот же путь

размер моего файла около 60kb

любые идеи, почему это может случиться? мне что-то не хватает?

+3

Использовать 'dataWithContentsOfFile: options: err или: 'для получения информации о причине сбоя. –

+0

Что такое путь к файлу? У него есть схема 'file: //' или нет? –

+0

Получает ли ваш файл 'uploadedData' результат или только ваш' uploadedDataBase64' возвращает нуль? – Pancho

ответ

0

Попробуйте 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"); 
} 
0

код, который вы написали здесь, выглядит ОК, Я бы предложил вам выбрать другой способ, который также требовал экземпляр NSError.

   `dataWithContentsOfFile:options:error:` 

Как вы будете пытаться преобразовать это содержимое файла в NSData если дело пойдет не так, то все равно вы получите некоторое описание ошибки и что описание ошибки может полезно для вас.

Я надеюсь, что это может полезно для вас ...... развеселить

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

здесь у пропустили/изменение приведенное выше утверждение к

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

'-stringByAppendingPathComponent:' автоматически помещается в разделитель путей. – JeremyP

+0

it wont @JeremyP – sreekanthk

+0

Проверьте документацию по [method] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/doc/uid/20000154-stringByAppendingPathComponent_): «** Возвращаемое значение ** Новая строка, сделанная добавлением aString в приемник **, который должен предшествовать, если необходимо, разделителем пути **". – JeremyP

Смежные вопросы