我正在尝试使用[[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]
,则结果为是。
什么可能导致副本失败并说该文件不存在,即使它确实存在?
更新
问题已修复。原来输出文件夹真的是自动添加到iTunes.localized,但我最初只是在通过finder进行分页时没有注意到这一点。修复输出路径解决了问题!谢谢你的帮助。
答案 0 :(得分:5)
如果目标路径中的任何目录不存在,那么如果源不存在,您将得到类似的错误。检查[manager fileExistsAtPath:[newFile stringByDeletingLastPathComponent] isDirectory:&isDir]
返回的内容。
答案 1 :(得分:3)
您使用的API错误。您需要查看-copyItemAtPath:toPath:error:
的返回值。仅当返回NO
时,才表示发生了错误。
如果您正在使用ARC,那么如果没有发生错误,您的error
变量应 nil
(虽然这在技术上无法保证),但如果您使用的话使用MRR它可能不会,因为你从未初始化它。