5

を使用してファイルをコピーしようとしています[[NSFileManager defaultManager] copyItemAtPath: toPath: error:]が、次のエラーで失敗しています:

4: ファイルが存在しません。

関連するコードは以下のとおりです。ファイルは存在し、まったく同じファイル パス文字列で事前に作成されているため、パス文字列は正しいです。

NSFileManager* manager = [NSFileManager defaultManager];
NSError* error;
NSString* fileName = [Sound getFileName:Title];
NSString* oldDirectory = [NSString stringWithFormat:@"%@%@/", [settings stringForKey:@"downloadFolder"], authorFolder];
NSString* oldFile = [oldDirectory stringByAppendingFormat:@"%@.mp3", fileName];
NSString* newFile = [NSString stringWithFormat:@"%@/iTunes/iTunes Media/Automatically Add to iTunes/%@.mp3", [NSSearchPathForDirectoriesInDomains(NSMusicDirectory, NSUserDomainMask, YES) objectAtIndex:0], fileName];
BOOL result = [manager copyItemAtPath:oldFile toPath:newFile error:&error];
if (!result && error)
{
     NSLog(oldFile);
     NSLog(@"There was an error copying the file to the iTunes directory! %@", [error localizedDescription]);
}

正確なコードではありませんが、関連するすべてのコードは上記のとおりです。私が使用した場合[manager fileExistsAtPath:oldFile]、結果はYESです。

ファイルが存在する場合でも、コピーが失敗し、ファイルが存在しないと言う原因は何ですか?

アップデート:

問題が修正されました。出力フォルダーは実際には iTunes.localized に自動的に追加されていたことが判明しましたが、最初はファインダーをページングしただけではこれに気づきませんでした。出力パスを修正すると問題が解決しました! 助けてくれてありがとう。

4

2 に答える 2

6

宛先のパスにディレクトリが存在しない場合、ソースが存在しない場合と同様のエラーが発生します。[manager fileExistsAtPath:[newFile stringByDeletingLastPathComponent] isDirectory:&isDir]何が返されるかを確認してください。

于 2013-03-20T07:43:10.953 に答える
3

API の使い方が間違っています。の戻り値を見る必要があります-copyItemAtPath:toPath:error:。それが返された場合にのみNO、エラーが発生したことを意味します。

ARC を使用している場合、変数errorエラーnilが発生しなかった場合 (技術的に保証されていませんが) になるはずですが、MRR を使用している場合は、初期化していないため、おそらくそうではありません。

于 2013-03-20T06:08:28.143 に答える