【问题标题】:JXA NSFileManager createDirectoryAtPathWithIntermediateDirectoriesAttributesError exceptionJXA NSFileManager createDirectoryAtPathWithIntermediateDirectoriesAttributesError 异常
【发布时间】:2016-11-14 19:30:55
【问题描述】:

我在 OS/X 10.11.5 上使用以下 JXA(自动化 JavaScript)代码:

function createFolder(path, createIntermediateDirectories) {
    var error = {}
    $.NSFileManager.defaultManager
        .createDirectoryAtPathWithIntermediateDirectoriesAttributesError(
            $(path).stringByStandardizingPath, 
            createIntermediateDirectories, 
            null, 
            error);
    if (error)
        throw Error("Could not create folder '" + path + "'");
};

运行此程序时出现错误,尽管它确实创建了文件夹。这是错误:

错误:对象引发的异常:-[NSNull objectForKey:]: 无法识别的选择器发送到实例 0x7fff7b69b780 (-2700)

从实际创建文件夹的事实和错误消息的文本来看,我假设问题出在“attributes”参数上,该参数为 null (nil)。我认为它会创建文件夹,然后分配属性,然后就失败了。

有人知道如何解决这个问题吗?我从 JXA 调用任何其他 NSFileManager 方法都没有遇到任何问题,包括我向其传递 null 和/或布尔值的方法,所以这被难住了。

感谢任何帮助。

【问题讨论】:

    标签: javascript macos javascript-automation


    【解决方案1】:

    对不起, 我现在没有太多时间,所以这里有一个可以在这里正常工作的快速解决方案:

    function createFolder(path, createIntermediateDirectories) {
        error = $()
    
        $.NSFileManager.defaultManager.createDirectoryAtPathWithIntermediateDirectoriesAttributesError(
            $(path).stringByStandardizingPath, 
            createIntermediateDirectories, 
            $(), 
            error)
    
        if (error) {
            $.NSLog(error.localizedDescription);
        }
    };
    

    玩得开心! 迈克尔/汉堡

    【讨论】:

    • 这使它不会抛出异常,这太棒了!谢谢。如果我检查结果的真假,那似乎是可靠的。但是,我似乎无法对“错误”做任何事情。它总是“真实的”,但似乎没有任何属性我可以用来报告错误(在我的测试用例中,这将是“已经存在”或类似的东西)。所以问题解决了(非常感谢),现在我只是有点困惑。
    • 如果给定目录在调用后可用,我认为 createDirectoryAtPathWithIntermediateDirectoriesAttributesError 总是返回 true。我发现唯一会引发错误的是创建一个与您要创建的目录名称相同的文本文件。
    • 谢谢!我很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 2019-10-25
    • 1970-01-01
    • 2014-12-13
    相关资源
    最近更新 更多