3

在我的可可应用程序中,我具有将文件移动到某个目的地的功能。假设用户有一个文件 /Users/Josh/Desktop/my.zip。用户可以将此 my.zip 文件移动到另一个目的地,my.zip 将在桌面中消失。

在我的代码中,我使用了 replaceItemAtURL,因为目标文件夹也可能包含另一个 my.zip:

bMoveSuccess = [[NSFileManager defaultManager] replaceItemAtURL:destinationURL withItemAtURL:sourceURL backupItemName:nil options:0 resultingItemURL:&destinationURL error:&error];

如果我调用它来在同一个卷中移动文件,它可以工作,但是如果我调用它并将目标设置为不同的卷(即 USB 密钥),那么我会收到错误消息:

Error Domain=NSCocoaErrorDomain Code=512 "The file “my.zip” couldn’t be saved."
UserInfo=0x101b51840 {NSFileOriginalItemLocationKey=file://localhost/Volumes/USB/my.zip,
NSURL=file://localhost/Volumes/USB/my.zip, 
NSFileNewItemLocationKey=file://localhost/Users/Josh/Desktop/my.zip,
NSUnderlyingError=0x101b2e3d0 "The operation couldn’t be completed. Cross-device link"}
4

1 回答 1

4

这行不通。这些方法依赖于较新的 NSURL 书签功能,它可以跟踪文件的位置,即使它在同一卷中打开时被移动。它不适用于跨卷移动。你必须改变你的方法(添加一些额外的代码来检查这个错误并专门处理这个案例)。

于 2013-05-03T20:24:01.393 回答