【问题标题】:Recursively listing, and storing, directory contents递归列出和存储目录内容
【发布时间】:2011-02-28 11:53:43
【问题描述】:

我知道如何递归地列出目录内容。我将使用 Snow Leopard 的 enumeratorAtURL:includePropertiesForKeys:options:errorHandler: 方法来执行此操作。

但是,我想存储我的发现到一个对象层次结构中(例如,具有 isLeaf 的自定义 FileOrDirectory 类的对象, childrencount 属性)。

我需要将目录和文件结构预加载到这样的对象层次结构中,以便使用 NSTreeController 等做任何我想做的事情。我想这里最棘手的事情是在对象层次结构中正确设置 children 属性。

有什么想法吗?

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    如果我正确理解您的问题,您可以通过编写一个递归函数来解决这个问题,该函数采用当前节点(文件或文件夹)并返回一个表示其结构的对象。

    这是 Java,但也许它传达了我的想法。我省略了isLeafcount,因为它们的值可以从children 导出。

    class FileOrFolder
    {
        String name;
        FileOrFolder[] children;
        boolean isFile;
    }
    
    private FileOrFolder traverse(File file)
    {
        FileOrFolder fof = new FileOrFolder();
        fof.name = file.getAbsolutePath();
        if (file.isDirectory())
        {
            String[] children = file.list();
            fof.children = new FileOrFolder[children.length];
            for (int i = 0; i < children.length; i++)
            {
                fof.children[i] = traverse(new File(fof.name + "/" + children[i]));
            }
        }
        fof.isFile = file.isFile();
        return fof;
    }
    

    【讨论】:

    • 我理解你。谢谢。但是,我认为用于递归列出内容的内置 Cocoa 方法不适合我的目的?我想我确实必须自己进行递归(进行“if 目录”检查)才能正确捕获我想要的层次结构?我对吗? Cocoa 开发者同意吗?
    • 内置功能为您提供了什么?层次结构的文本表示?在这种情况下,另一种选择是编写代码来解析列表并构建您在旅途中需要的那种表示。我可以离开,对不起,不是可可人。
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2013-10-26
    • 2010-09-11
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多