如何将文件从文件复制到iOS中的应用程序包中?

时间:2012-08-17 17:34:14

标签: ios cocoa-touch

我想将文件从文档复制到iOS中的资源文件夹。

不是资源来记录。

从文档到资源的文件。

所以我写了以下代码。

- (NSString *) getDBPath2 
{   
    NSString *dbPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Htoo.mp3"];

    return dbPath;
}

- (void) copyDatabaseIfNeeded 
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSString *dbPath = [self getDBPath];
    BOOL success = [fileManager fileExistsAtPath:dbPath]; 

    if(success) 
    {   
        NSString *defaultDBPath = [[NSBundle mainBundle] resourcePath];
        success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];

        if (!success)
            NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }   
}

- (NSString *) getDBPath 
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
    NSString *documentsDir = [paths objectAtIndex:0];
    return [documentsDir stringByAppendingPathComponent:@"Htoo.mp3"];
}

当我写上面的代码时,我收到了错误消息。

2012-08-17 23:55:03.482 TestProjects[1645:f803] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Failed to create writable database file with message 'The operation couldn’t be completed. (Cocoa error 516.)'.'

那么如何将文件从文档复制到iOS中的资源?

感谢您的阅读。

2 个答案:

答案 0 :(得分:4)

您的应用程序(Bundle)的资源是只读的,您不能在发布后修改它。 bundle包是由Xcode在编译时创建的,你不能在运行时修改它。安装应用程序后,有很多方法可以存储数据:NSDefaults,sqlite,Core Data,文档目录。

答案 1 :(得分:0)

如果您想保存MP3,那么最好将其保存在缓存中:

    NSString *desPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];