如何使用 NSFileManager 复制 UNIX 可执行文件?

Posted

技术标签:

【中文标题】如何使用 NSFileManager 复制 UNIX 可执行文件?【英文标题】:How do I copy a UNIX Executable File with NSFileManager? 【发布时间】:2012-05-10 01:05:13 【问题描述】:

我正在尝试使用 NSFileManager copyItemAtURL:toURL:error: 将 UNIX 可执行文件(命令行程序)从一个目录移动到另一个目录,但我总是收到一条错误消息,指出 URL 类型不受支持。我认为这是因为文件上没有扩展名,它被视为一个目录,但我不确定。可以用NSFileManager移动这种类型的文件吗?

编辑: 这是我的代码

#define SAVE_DIR   [@"~/Library/Prog" stringByExpandingTildeInPath]
#define PROG_PATH  [SAVE_DIR stringByAppendingString:@"/ProgCom"]
#define RESOURCES  [[NSBundle mainBundle] resourcePath]
#define LOCAL_PROG [RESOURCES stringByAppendingString:@"/ProgCom"]

-(void)moveProg

    NSError *error = nil;
    NSURL *fromURL = [NSURL URLWithString:LOCAL_PROG];
    NSURL *toURL = [NSURL URLWithString:PROG_PATH];

    NSLog(@"%@", [fromURL path]);
    NSLog(@"%@", [toURL path]);

    if ([fMan fileExistsAtPath:[fromURL path]]) 
        [fMan copyItemAtURL:fromURL
                      toURL:toURL
                      error:&error];
        if (error)
            [NSApp presentError:error];
    

我收到的错误:

The file couldn't be opened because the specified URL type isn't supported.

最后记录了什么:

fromURL = /Users/Nick/Library/Developer/Xcode/DerivedData/Prog-dpnblqaraeuecyadjgizbinfrtcm/Build/Products/Debug/Prog.app/Contents/Resources/ProgCom

toURL = /Users/Nick/Library/Prog/ProgCom

【问题讨论】:

它应该可以工作。没有什么特别的技巧,也不关心文件扩展名。听起来您的网址不正确。记录这两个 URL 并将它们发布在您的问题中。 【参考方案1】:

问题是您使用的是+[NSURL URLWithString:]。这会产生一个无效的 URL,因为您实际上并没有给它一个。你想要的是+[NSURL fileURLWithPath:],它将产生一个file:///Users/Nick/... URL。

【讨论】:

哇...我为忘记fileURLWithPath而感到非常愚蠢。感谢您的帮助。

以上是关于如何使用 NSFileManager 复制 UNIX 可执行文件?的主要内容,如果未能解决你的问题,请参考以下文章

NSFileManager:复制文件不成功

如何通过 NSFileManager 将目录A下所有文件拷贝到 目录B

NSFileManager 是不是将修改日期等元数据与文件一起复制?

NSFileManager 中的错误(实例方法是遍历符号链接)

NSFileManager UUID 应用目录

为啥 NSFileManager 不工作?