NSFileManager не создает файл

#objective-c #cocoa #xcode #ios4 #xcode4

#objective-c #cocoa #xcode #ios4 #xcode4

Вопрос:

У меня проблема с NSFileManager, потому что я могу сохранить файл только в каталоге документов приложения, но я хочу создать файл в подкаталоге, который, не знаю почему, я не смог создать. мой код ниже:

  (NSString *)applicationDocumentsDirectory {
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

 (BOOL)storeFile:(NSData*)file withName:(NSString*)name atDirectory:(NSString*)dir{

    NSFileManager *filemgr;
    NSString *docsDir;
    NSString *newDir;
    BOOL create=NO;
    filemgr =[NSFileManager defaultManager];


    docsDir = [StorageManager applicationDocumentsDirectory];

    newDir = [docsDir stringByAppendingPathComponent:dir];

    if(![filemgr fileExistsAtPath:newDir]){
        if([filemgr createDirectoryAtPath:newDir withIntermediateDirectories:NO attributes:nil  error:nil]){
            create=YES;
        }    
    }else
        create=YES;

    if(create){
        if(![filemgr createFileAtPath:newDir contents:file attributes:nil]){
            [filemgr release];
            return YES;
        }
    }

        [filemgr release];
    return NO;
}
  

Ответ №1:

Я не уверен, почему файл не создан. На первый взгляд, кажется, что ваш код должен работать. Но, возможно, я что-то упускаю из виду. Это также зависит от того, что именно вы передаете в качестве аргументов storeFile:withName:atDirectory: методу.

Тем не менее, я публикую ответ, потому что я обнаружил другую ошибку в вашем коде: вам не следует отправлять release на filemgr , поскольку вы также не отправляли retain ему первым и не создавали объект. В этом случае также нет необходимости отправлять на него retain , поскольку вы используете его только локально в своем методе. Возможно, вы захотите ознакомиться с документом Apple Developer Connection «Основные компетенции Cocoa: управление памятью«.

Я не думаю, что эта ошибка объясняет, почему файл не создается; хотя я удивлен, что ваше приложение не вылетает из-за этого.

Комментарии:

1. если я не создаю папку и пытаюсь создать тот же файл, но внутри папки documents, это происходит хорошо .. я думаю, мне нужно установить разрешения для новой папки…

2. Привет, спасибо за помощь, я просто нахожу решение!!! Проблема в том, что я не добавил к пути к файлу имя файла… боже, эта проблема решена…