2010-06-06 3 views
0

재귀 적으로 디렉터리 내용을 나열하는 방법을 알고 있습니다. 스노우 레오파드의 enumeratorAtURL : includingPropertiesForKeys : options : errorHandler : 메소드를 사용합니다.디렉터리 내용을 재귀 적으로 나열 및 저장합니다.

그러나 나는 저장소에 객체 계층 구조 내 결과를 원하는 (예를 들어,의를, isLeaf, 어린이 속성이 사용자 정의 FileOrDirectory 클래스의 객체).

NSTreeController 및 기타 등을 사용하여 원하는 모든 작업을 수행하기 위해 디렉터리 및 파일 구조를 이러한 개체 계층 구조에 미리로드해야합니다. 여기서 가장 까다로운 것은 자식 속성이 객체 계층 구조에서 올바르다는 것입니다.

아이디어가 있으십니까?

답변

1

질문을 올바르게 이해하면 현재 노드 (파일 또는 폴더)를 사용하고 구조를 나타내는 개체를 반환하는 재귀 함수를 작성하여이 문제를 해결할 수 있습니다.

이것은 자바이지만 어쩌면 내 아이디어를 전달합니다. 나는 그 값이 children에서 파생 될 수 있으므로 isLeafcount을 생략했습니다.

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; 
} 
+0

잘 알고 있습니다. 감사. 그러나, * recursively * listing contents를위한 내장 된 코코아 메서드가 내 목적에 적합하지 않다고 생각합니까? 내가 원하는 계층 구조를 올바르게 캡처 할 수 있도록 직접 재귀를 수행해야한다고 가정합니다 ("if directory"검사를 수행)? 내가 맞습니까? 코코아 개발자들은 동의합니까? – Enchilada

+0

기본 제공 기능으로 제공되는 기능은 무엇입니까? 계층 구조의 텍스트 표현은 무엇입니까? 이 경우 대안은 목록을 구문 분석하고 이동 중에 필요한 표현의 종류를 만드는 코드를 작성하는 것입니다. 나는 우리 길을 떠날 수 있었다. 코코아 사람은 유감스럽게 생각하지 않았다. –

관련 문제