Переименование и перемещение файла с помощью NSFIleManager - PullRequest
2 голосов
/ 24 января 2012

Это мой код для переименования и перемещения файла из временного каталога в каталог «Мои документы».

Таким образом, проблема в двух разделах режима Создать каталог и Попытка перемещения. В остальном все работает правильно ..

Когда я комментирую раздел «Создать каталог», в консоли регистрируется раздел «Попытка перемещения»:

Невозможно переместить файл .. Код ошибки 4.

Теперь я исследовал код ошибки 4, и это означает, что каталог не существует. Поэтому я добавил код для создания каталога.

Теперь, когда я запускаю программу, каталог создается, но журналы раздела «Попытка переместить»:

Невозможно переместить файл .. код ошибки 512

Сейчас исследуем его, потому что файл уже существует. Пункт назначения не должен существовать.

Так что я в замешательстве, так как оба кода ошибок сжимаются.

{
    NSError *error;
    NSFileManager* manager = [[NSFileManager alloc] init]; 
    NSString* tempFile =[NSTemporaryDirectory() stringByAppendingPathComponent:@"recordTest.caf"];
    if (tempFile) 
    {
        // Get the Documents Directory
        NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
        NSLog(@"Documents directory: %@",
              [manager contentsOfDirectoryAtPath:documentsDirectory error:&error]);

        //Get the User File Save Name from the text field
        NSString *UserText =   [[self FileNameText] text];

        // Rename the file, by moving the file
        NSString *filePath2 = [documentsDirectory 
                               stringByAppendingPathComponent:[NSString stringWithString:UserText]];

        // Create a Directory
        if( [manager createDirectoryAtPath:[NSString stringWithFormat:@"%@/%@",documentsDirectory,UserText]  withIntermediateDirectories:NO attributes:nil error:&error]!= YES) 
       {
           NSLog(@"Directory error");
       }

        if([manager fileExistsAtPath:[NSString stringWithFormat:@"%@/%@",documentsDirectory,UserText]])
        {
            NSLog(@"Path exist");
            NSLog(@"Documents directory: %@",
                  [manager contentsOfDirectoryAtPath:documentsDirectory error:&error]);
        }
        // Attempt the move
        if ([manager moveItemAtPath:tempFile toPath:filePath2 error:&error] != YES)
        {
            NSLog(@"Unable to move file: %@", [error localizedDescription]);
        }
        else
        {
            if ([manager removeItemAtPath:tempFile error:&error] != YES)
                NSLog(@"Unable to delete file: %@", [error localizedDescription]);
        }
    }
    [manager release];

}

Ответы [ 3 ]

5 голосов
/ 24 января 2012

Скорее всего, проблема в том, что файл, который вы пытаетесь переместить, не существует.

замените

if (tempFile) //this will return YES every time, telling you you have a string!

на

 if ([manager fileExistsAtPath:tempFile]) //this will tell you if the file exists at that path

Несколько заметок

1. Чтобы убедиться, что искомый файл действительно существует, проверьте папки приложения симулятора примерно так:

/ Пользователи / yogevshelly / Библиотека / Приложение \ Поддержка / iPhone \ Simulator / 5.0 / Приложения

, затем перейдите к определенному приложению

2. Не просто добавляйте строки для получения папок, сделайте что-то вроде этого:

NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [dirPaths objectAtIndex:0];

3. Следующая строка создаст папку с именем файла в качествеимя папки!:

[manager createDirectoryAtPath:filePath2  withIntermediateDirectories:NO attributes:nil error:&error]

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

0 голосов
/ 24 января 2012

Насколько я понимаю, проблемная часть кода выглядит следующим образом

// Создать каталог

if( [manager createDirectoryAtPath:[NSString stringWithFormat:@"%@/%@",documentsDirectory,UserText]  withIntermediateDirectories:NO attributes:nil error:&error]!= YES) 
   {
       NSLog(@"Directory error");
   }

Вы создаете папку с именем файла в том же месте .... попробуйте комментировать приведенный выше код ... он должен работать.

0 голосов
/ 24 января 2012

вы используете метод

contentsOfDirectoryAtPath: withIntermediateDirectories: attributes:error

этот метод создает каталог, но вы передаете ему имя файла.я думаю, что вы создаете / Documents / filename / вместо / Documents / filename

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...