Скопировать папку из каталога ресурсов iPhone в каталог документов - PullRequest
7 голосов
/ 31 января 2010
BOOL success;
NSFileManager *fileManager = [[NSFileManager defaultManager]autorelease];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory,
                                                      NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *documentDBFolderPath = [documentsDirectory stringByAppendingPathComponent:@"DB"];
success = [fileManager fileExistsAtPath:documentDBFolderPath];

if (success){
 return;
}else{
 NSString *resourceDBFolderPath = [[[NSBundle mainBundle] resourcePath]
                                         stringByAppendingPathComponent:@"DB"];
 [fileManager createDirectoryAtPath: documentDBFolderPath attributes:nil];
    [fileManager copyItemAtPath:resourceDBFolderPath toPath:documentDBFolderPath           
                                                                         error:&error];
 }
}

Вот так.

Resources / DB / words.csv => Копирование папки БД => Документ / DB / words.csv

Я хочу скопировать подкаталог БД в разделе Ресурсыпапка.Я думал, что источник хороший.Но этот источник создает папку и не копирует файлы в папку БД в папке Ресурсы.

Я действительно хочу скопировать файлы в папку БД в папке Ресурсы.пожалуйста, помогите мне.

Ответы [ 2 ]

8 голосов
/ 31 января 2010

1) Не -autorelease NSFileManager. Вы дважды выпускаете его, что приведет к падению вашего приложения.

2) Не нужно звонить -createDirectoryAtPath:. Из документа SDK -copyItemAtPath:toPath:error:,

Файл, указанный в srcPath , должен существовать, а dstPath не должен существовать до операции

и создание каталога с копией для сбоя.

1 голос
/ 12 мая 2017

Swift 3.0

Использование строки

func copyFolder(){

    // Get the resource folder
    if let resourceMainPath = Bundle.main.resourcePath{

        var isDirectory = ObjCBool(true)
        // Get the path of the folder to copy
        let originPath = (resourceMainPath as NSString).appendingPathComponent("NameOfFolder")
        // Get the destination path, here copying to Caches
        let destinationPath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first!
        // Append the folder name to dest path so that system creates the directory if it doesnt exist
        let destPath = (destinationPath as NSString).appendingPathComponent("/NameOfFolder")
        let fileManager = FileManager.default
        if fileManager.fileExists(atPath: destPath, isDirectory:&isDirectory ){
            // If an overwrite behavior is needed, remove and copy again here
             print("Exists")
        }else{
            // Do the copy
            do {
                try fileManager.copyItem(atPath: originPath, toPath: destPath)
            }catch let error{
                print(error.localizedDescription)
            }
        }
    }else{

    }

}

Использование URL

func copyTheFolder(){

    // Get the resource folder
    if let resourceMainURL = Bundle.main.resourceURL{
        var isDirectory = ObjCBool(true)
        // Get the path of the folder to copy
        let originPath = resourceMainURL.appendingPathComponent("NameOfFolder")
        // Get the destination path, here copying to Caches
        let destinationPath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first!
        // Append the folder name to dest path so that system creates the directory if it doesnt exist
        let destURL = URL(fileURLWithPath: destinationPath).appendingPathComponent("/NameOfFolder")
        let fileManager = FileManager.default
        if fileManager.fileExists(atPath: destURL.path, isDirectory:&isDirectory ){
            // If an overwrite behavior is needed, remove and copy again here
            print("Exists")

        }else{
            // Do the copy
            do {
                try fileManager.copyItem(at: originPath, to: destURL)

            }catch let error{
                print(error.localizedDescription)
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...