Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 如果我尝试将项替换到其他卷,则ReplaceItemAttribute将不起作用_Cocoa_File_Move_Nsfilemanager - Fatal编程技术网

Cocoa 如果我尝试将项替换到其他卷,则ReplaceItemAttribute将不起作用

Cocoa 如果我尝试将项替换到其他卷,则ReplaceItemAttribute将不起作用,cocoa,file,move,nsfilemanager,Cocoa,File,Move,Nsfilemanager,在我的cocoa应用程序中,我有一个将文件移动到特定目标的功能。假设用户有一个文件/Users/Josh/Desktop/my.zip。用户可以将此my.zip文件移动到另一个目标,my.zip将在桌面中消失 在我的代码中,我使用了replaceitematall,因为目标文件夹可能还包含另一个my.zip: bMoveSuccess = [[NSFileManager defaultManager] replaceItemAtURL:destinationURL withItemAtURL:s

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

在我的代码中,我使用了replaceitematall,因为目标文件夹可能还包含另一个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"}

这是行不通的。这些方法依赖于较新的NSURL书签功能,该功能可以跟踪文件的位置,即使文件在同一卷中打开时被移动。它不适用于跨卷移动。您必须更改方法,添加一些附加代码以检查此错误并专门处理此情况。

因此,对于跨卷移动,我应该执行以下操作:1。使用createFileAtPath,它允许覆盖将/Volumes/USB/my.zip替换为/Users/Josh/Desktop/my.zip 2。完成后,使用removeItemAtPath从my.zip中删除原始文件。这是跨卷移动的好方法吗?我还有一个关于沙箱的问题。如果以后我想对我的应用程序进行沙箱处理,我能采用这种方法吗?请提供建议。我相信只要您使用系统对话框让用户选择路径,您就安全了,但我希望其他人参与进来,因为我不是绝对确定。关于刚才提到的关于重写现有文件的问题,请考虑询问用户一次,不要再告诉我一个选项。你可能有一个很好的理由来解释为什么在你的情况下这是正确的,但是这很可能会给某人带来非常糟糕的一天。不过,总的来说,是的,在进行大量错误检查的过程中,这对我来说似乎是一种有效的方法。此外,添加一个小细节:NSURL的书签功能也不能用于联网卷。