0

アプリ NSBundle から Documents ディレクトリにファイルをコピーしたい。

どのように私はこのコードを動作させることができません:

-(NSString*)copyFile:(NSString*)name{


    NSString *storePath = [[[appDelegate applicationDocumentsDirectory] absoluteString] stringByAppendingPathComponent:name];

    NSError *error;

    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath:storePath]) {
        NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"recordTest" ofType:@"caf"];
        if (defaultStorePath) {
            if ([fileManager fileExistsAtPath:defaultStorePath]) {
                [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:&error];
                 NSLog(@"Error: %@)" , [error localizedDescription]);
            }


        }
    }
    return storePath;
}

このプリント 操作を完了できませんでした。

さらに詳細に:

Error Domain=NSCocoaErrorDomain Code=4 "The operation couldn’t be completed. (Cocoa error 4.)" UserInfo=0xd629530 {NSUserStringVariant=(
    Copy
), NSFilePath=/var/mobile/Applications/D0183043-3FD2-4341-8DA4-E1D140E556F6/test.app/recordTest.caf, NSDestinationFilePath=file:/localhost/var/mobile/Applications/D0183043-3FD2-4641-8DA4-E5D140E556F6/Documents/recordTest.caf, NSUnderlyingError=0xd629970 "The operation couldn’t be completed. No such file or directory"}

コピーする前に確認すると、そのようなファイルが存在しない理由がわかりません。

何か案は ?

ありがとう

4

2 に答える 2

2

宛先は、ファイル パスではなく、ファイル URL です。私はいつも使用します:

NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSString *documentFullPath = [documentsFolder stringByAppendingPathComponent:name];

または、Swift 2 では:

let documents = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false)
let fileURL = documents.URLByAppendingPathComponent(name)
let documentsFullPath = fileURL.path
于 2012-08-05T19:57:36.470 に答える
1

「storePath」は文字列「path」ではなくURLのようです。いくつかのログを追加します-「absoluteString」ではなく「path」が必要だと思います。

于 2012-08-05T19:47:03.600 に答える