У меня есть код ниже для получения файла из каталога документов 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 возвращает ноль, однако оба они имеют одинаковый путь

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

Есть идеи, почему это могло произойти? я что-то пропустил?

3
ercan 2 Июн 2014 в 15:19

3 ответа

Лучший ответ

Попробуйте эту отличную категорию 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
Sadiq Jaffer 2 Июн 2014 в 14:49

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

               `dataWithContentsOfFile:options:error:`

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

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

0
Kamar Shad 2 Июн 2014 в 11:49
realpath=[[NSString alloc] initWithString:
      [docsDir stringByAppendingPathComponent: @"2_program.db"]];

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

realpath = [[NSString alloc] initWithString:
      [docsDir stringByAppendingPathComponent: @"/2_program.db"]];
-1
sreekanthk 2 Июн 2014 в 12:07