2013-03-20 116 views
4

我试图用[[NSFileManager defaultManager] copyItemAtPath: toPath: error:]复制一个文件不存在的文件,但它与下面的错误而失败:的NSFileManager copyItemAtPath抱怨确实存在

4: The file does not exist.

相关的代码如下,并且该文件确实存在,路径字符串是正确的,因为它是事先用完全相同的文件路径字符串创建的。

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],结果是

什么会导致复制失败,并说该文件不存在,即使它呢?

UPDATE:

发出定额。结果是输出文件夹实际上是自动添加到iTunes.localized,但是当通过查找器分页时,我没有注意到这一点。修复输出路径解决了问题!谢谢您的帮助。

+0

记住了'copyItemAtPath:toPath:错误:'方法,如果目标文件已经存在失败。它不会覆盖现有的文件。 – rmaddy 2013-03-20 06:15:46

+0

@rmaddy感谢你的抬头。我已在本地更正了我的代码以检查此问题,但我已手动确保目标文件不存在,并且仍然收到此错误。 – 2013-03-20 06:35:12

回答

5

如果任何目的地的路径中的目录不存在,你会得到一个类似的错误,如果源不存在你会得到什么。检查什么[manager fileExistsAtPath:[newFile stringByDeletingLastPathComponent] isDirectory:&isDir]返回。

+0

对于isDir和实际返回值,结果为NO。我会认为这意味着我的问题在于输出路径。我会进一步研究,希望能够独立解决我的问题。谢谢你的抬头,我至少知道现在哪里好看 – 2013-03-20 15:13:03

+0

标记为答案,因为没有给出正确的答案,但这导致我找到问题! – 2013-03-20 15:24:31

+0

感谢您接受,但我很困惑,为什么你说这是不正确的。这听起来像我完全预测了什么是错的。 – 2013-03-20 15:29:48

3

您正在使用的API错误。您需要查看-copyItemAtPath:toPath:error:的返回值。只有在返回NO时,这意味着发生了错误。

如果您使用ARC,您error可变应该nil没有发生错误(尽管这在技术上并不保证),但如果你使用它MRR可能不会,因为你永远不初始化它。

+0

我实际上试过使用返回值,并且它与错误一起返回NO。它也没有真正复制文件,所以这是一个非常大的指示器,它不起作用。 – 2013-03-20 06:33:59