2012-09-14 2 views
2

나는 CDT Eclipse 플러그인 개발 중이며, 다음 코드를 사용하여 CDT 코드를 사용하여 Eclipse 프로젝트 탐색기에있는 소스 파일 목록을 얻으려고합니다. 없는.CDT를 사용하여 기존 이클립스 프로젝트의 소스 파일 목록을 얻으십시오

사례 1 :

IFile[] files2 = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(new URI("file:/"+workingDirectory)); 
for (IFile file : files2) { 
    System.out.println("fullpath " +file.getFullPath()); 
} 

Case2 :

IFile[] files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(getProject().getRawLocationURI()); 
for (IFile file : files) { 
    System.out.println("fullpath " +file.getFullPath());    
} 

Case3 :

IFile[] files3 = ResourceLookup.findFilesByName(getProject().getFullPath(),ResourcesPlugin.getWorkspace().getRoot().getProjects(),false); 
for (IFile file : files3) { 
    System.out.println("fullpath " +file.getFullPath()); 
} 

Case4 :

IFolder srcFolder = project.getFolder("src"); 

사례 1, 나에게 내가 파일의 목록을 기대하고 출력 널 (null)을주는 2,3; 사례 4 : "helloworld/src"파일 목록을 가져 오는 중, 기존 프로젝트의 파일을 가져올 것으로 예상됩니다. 예 : "helloworld" 제발 제안 해주세요.

답변

2

당신은 IResourceVisitor를 사용하여 worspace 자원 트리를 통해 걸을 수 있습니다 - 또는 당신은 CDT 모델을 통해 걸을 수 :

private void findSourceFiles(final IProject project) { 
    final ICProject cproject = CoreModel.getDefault().create(project); 
    if (cproject != null) { 
     try { 
      cproject.accept(new ICElementVisitor() { 

       @Override 
       public boolean visit(final ICElement element) throws CoreException { 
        if (element.getElementType() == ICElement.C_UNIT) { 
         ITranslationUnit unit = (ITranslationUnit) element; 
         if (unit.isSourceUnit()) { 
          System.out.printf("%s, %s, %s\n", element.getElementName(), element.getClass(), element 
            .getUnderlyingResource().getFullPath()); 
         } 
         return false; 
        } else { 
         return true; 
        } 
       } 
      }); 
     } catch (final CoreException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

당신이 실제로 원하는 주 이상의 소스 파일이있을 수 있습니다 (예를 들어, 당신에 대해 시스템을 걱정하지 않을 수 있습니다 헤더) - 기본 리소스가 무엇인지 확인할 수 있습니다.

+0

Eugene, 답장을 보내 주셔서 감사합니다. 음, 단일 프로젝트의 경우 프로젝트 소스 파일을 나열하고 있습니다.하지만 제 경우에는 표준 프로젝트를 만들었습니다. 기본 표준 프로젝트 내에서 하나의 프로젝트를 추가로 만들고 싶습니다. 주요 프로젝트의 소스 파일 목록, 내부 프로젝트의 소스 파일을 나열된 주어진 코드를 사용하여,하지만 관련 프로젝트 소스 파일을 얻고 싶습니다; 제발 제안해라. –

+0

@AnilKumar는 IResourceVisitor (및 IResource :: accept)를 살펴 봅니다. – Eugene

관련 문제