2008-11-01 5 views
8

나는 사용자가 디렉토리 (애플 리케이션에서는 윈도우가 아닌)를 빌드하는 프로그램을 만들고 있는데,이 폴더에는 서브 폴더가있다. 모든 폴더에는 폴더 또는 문서가 있어야합니다. 사용할 수있는 최상의 데이터 구조는 무엇입니까? 사용자는 하위 폴더를 선택하고 하위 폴더 및 하위 폴더에서 문서를 검색 할 수 있습니다. 폴더 나 하위 폴더 수준을 제한하고 싶지 않습니다.디렉토리 구조에 사용되는 데이터 구조는 무엇입니까?

+0

사양에서 판단이 폴더는 폴더와 문서의 혼합물을 포함 할 수 없습니다? 그리고 당신은 빈 서브 폴더를 가질 수 없습니까? 정확하십시오. –

+0

사실, 한 부분은 폴더에 혼합물이 들어 있지 않을 수도 있다고 말합니다. 또 다른 부분은 그들이 할 수도 있음을 암시합니다. –

답변

11

이 내가 할 것입니다 : ID와 ParentID : 데이터베이스에

모든 기록은 두 개의 필드가 있습니다. ID는 4-5 자입니다 (Base36, a-z : 0-9 또는 이와 유사한).

ID  ParentID  Name 

0000 NULL   ROOT 
0001 0000   Folder1 
0002 0000   Folder2 
0003 00000002  Folder3 
0004 0000   Folder4 
0005 00000004  Folder5 
0006 000000040005 Folder6 

내가 좋아하는 :

Root 
    Folder1 
    Folder2 
     Folder3 
    Folder4 
     Folder5 
     Folder6 

다음과 같이 표현된다 : 부모 ID는

그래서 ...

이 구조는 ... 부모의 전체 구조의 연결입니다 이 구조 때문에 폴더 아래에있는 모든 파일을 찾아야 할 경우 다음과 같은 쿼리를 수행 할 수 있습니다.

68,856,319,폴더와 모든 자식을 삭제하려면 :

DELETE FROM Folders WHERE ID='0004' AND ParentID LIKE '00000004%' 

폴더와 아이를 이동하려면 새 부모로, 같은 부모를 사용하는 모든 레코드를 업데이트해야합니다.

그리고 폴더 또는 이에 대한 분명한 한계가 하위 폴더의 번호가 ParentID 필드의 크기로 제한되어 있다는 것입니다 하위 수준

을 linit 싶지 않아요.

+0

각 폴더/문서에 "크기"필드를 추가하면 모든 부모의 크기를 업데이트하는 방법은 무엇입니까? – tuananh

8

난 당신이를 구성 할 수있는 몇 가지 방법을 생각할 수 있지만, 아무것도 분명 이길 것 :

은 실제 파일 시스템을 사용합니다.

+0

Modded down,하지만 정말로, 이것은 유일한 정상적인 대답입니다! –

+0

왜? 경솔한 것으로 오지 않으려 고하지 않는 것이 나의 질문입니다. – iokevins

+3

누군가가 메모리에 스냅 샷을 보관하여 IO가 최소이고 쓰기 만하는 경우에는 어떻게해야합니까? 그 때 무엇? ... 실제 파일 시스템을 사용하는 것은 고성능 시스템을위한 옵션이 아닙니다. –

5

좀 나는 문제는 특히 데이터 구조를 요청하는 것을 알고 tree data structure

+0

귀하의 의견에 귀하의 이름이 나타납니다. 서명 할 필요가 없습니다. – bzlm

+0

@bzlm : 물론 그렇습니다. 나는 그 당시에는 익숙해 져 있었다 :-) – Cameron

0

의 종류하지만 ...를 사용으로 보일 것이다

당신은 어쩌면 당신은을 사용할 수있는 객체 지향 언어를 사용하는 경우

구조와 같은 계층 트리 구조에 이상적으로 적합한 복합 디자인 패턴. 당신은 당신이 요구하는 것을 얻습니다.

0

대부분의 OO 언어는 파일 시스템에 대한 일종의 추상화가 있기 때문에 시작할 곳이 있습니다. 필요한 경우 서브 클래스를 작성하십시오.

예를 들어 디렉터리를 개체의 배열로 예상합니다.

0

당신은 내가 B + 트리를 추천한다 m-방법 트리 데이터 구조

+0

이것은 주석이어야한다. –

관련 문제