다음을 통해 공유


문서 테이블 실행

IDE는 현재 열려 있는 모든 문서 목록을 RDT(실행 중인 문서 테이블)라는 내부 구조로 유지합니다. 이 목록에는 이러한 문서가 현재 편집되고 있는지 여부에 관계없이 메모리에 있는 모든 열려 있는 문서가 포함됩니다. 문서는 프로젝트의 파일 또는 기본 프로젝트 파일(예: .vcxproj 파일)을 포함하여 유지되는 모든 항목입니다.

실행 중인 문서 테이블 요소

실행 중인 문서 테이블에는 다음 항목이 포함됩니다.

요소 설명
문서 모니커 문서 데이터 개체를 고유하게 식별하는 문자열입니다. 파일을 관리하는 프로젝트 시스템의 절대 파일 경로입니다(예: C:\MyProject\MyFile). 이 문자열은 또한 데이터베이스의 저장 프로시저와 같은 파일 시스템 이외의 저장소에 저장된 프로젝트에 사용됩니다. 이 경우 프로젝트 시스템은 문서 저장 방법을 결정하기 위해 인식할 수 있고 구문 분석할 수도 있는 고유 문자열을 만들 수 있습니다.
계층 구조 소유자 IVsHierarchy 인터페이스로 표시되는, 문서를 소유하는 계층 구조 개체입니다.
항목 ID 계층 구조 내의 특정 항목에 대한 항목 식별자입니다. 이 값은 이 문서를 소유하는 계층 구조의 모든 문서 간에 고유하지만 이 값이 서로 다른 계층 구조에서 고유한지는 보장되지 않습니다.
문서 데이터 개체 최소한 IUnknown입니다.

개체. IDE는 사용자 지정 편집기의 문서 데이터 개체에 대해 IUnknown 인터페이스 이상의 특정 인터페이스가 필요하지 않습니다. 그러나 표준 편집기의 경우 프로젝트의 파일 지속성 호출을 처리하기 위해 IVsPersistDocData2 인터페이스의 편집기 구현이 필요합니다. 자세한 내용은 표준 문서 저장을 참조하세요.
플래그 항목을 RDT에 추가할 때 문서 저장 여부, 읽기 또는 편집 잠금 적용 여부 등을 제어하는 플래그를 지정할 수 있습니다. 자세한 내용은 _VSRDTFLAGS 열거형을 참조하세요.
편집 잠금 수 편집 잠금의 수입니다. 편집 잠금은 일부 편집기에 문서가 편집용으로 열려 있음을 의미합니다. 편집 잠금 수가 0으로 전환되면 문서가 수정된 경우 문서를 저장하라는 메시지가 사용자에게 표시됩니다. 예를 들어 편집기에서 새 창 명령을 사용하여 문서를 열 때마다 RDT에서 해당 문서에 편집 잠금이 추가됩니다. 편집 잠금을 설정하려면 문서에 계층 구조 또는 항목 ID가 있어야 합니다.
읽기 잠금 수 읽기 잠금의 수입니다. 읽기 잠금은 마법사와 같은 일부 메커니즘을 통해 문서를 읽고 있음을 나타냅니다. 읽기 잠금은 문서를 편집할 수 없음을 나타내지만 RDT에서 문서를 활성 상태로 유지합니다. 문서에 계층 구조 또는 항목 ID가 없더라도 읽기 잠금을 설정할 수 있습니다. 이 기능을 통해 문서가 특정 계층 구조에 포함되지 않더라도 메모리에 문서를 열고 RDT에 입력할 수 있습니다. 이 기능은 거의 사용되지 않습니다.
잠금 홀더 IVsDocumentLockHolder 인터페이스의 인스턴스입니다. 잠금 홀더는 편집기 외부에서 문서를 열고 편집하는 마법사와 같은 기능으로 구현됩니다. 잠금 홀더는 편집 중 문서가 닫히는 것을 방지하기 위해 해당 기능이 문서에 편집 잠금을 추가할 수 있게 해줍니다. 일반적으로 편집 잠금은 문서 창(즉, 편집기)에 의해서만 추가됩니다.

RDT의 각 항목에는 일반적으로 프로젝트의 한 노드에 해당하는, 연관된 고유한 계층 구조 또는 항목 ID가 포함됩니다. 편집에 사용 가능한 모든 문서는 일반적으로 계층 구조가 소유합니다. RDT에서 생성된 항목은 편집 중인 문서 데이터 개체를 현재 소유하는 프로젝트(또는 보다 정확하게는 계층 구조)를 제어합니다. RDT의 정보를 사용하여 IDE는 한 번에 두 개 이상의 프로젝트가 문서를 열지 못하도록 방지할 수 있습니다.

또한 이 계층 구조는 데이터 지속성을 제어하고 RDT 정보를 사용하여 저장다른 이름으로 저장 대화 상자를 업데이트합니다. 사용자가 문서를 수정한 다음, 파일 메뉴에서 끝내기 명령을 선택하면 IDE가 변경 내용 저장 대화 상자를 표시하여 현재 수정된 모든 프로젝트 및 프로젝트 항목을 보여 줍니다. 이렇게 해서 사용자가 저장할 문서를 선택할 수 있습니다. 저장할 문서 목록(즉, 변경 내용이 있는 문서)은 RDT에서 생성됩니다. 애플리케이션을 끝낼 때 변경 내용 저장 대화 상자에 표시하려는 항목은 RDT에 레코드가 있어야 합니다. RDT는 저장되는 문서를 조정하고 각 문서에 대해 플래그 항목에 지정된 값을 사용하여 저장 작업에 대해 사용자에게 메시지를 표시할지 여부를 조정합니다. RDT 플래그에 대한 자세한 내용은 _VSRDTFLAGS 열거형을 참조하세요.

편집 잠금 및 읽기 잠금

편집 잠금과 읽기 잠금은 RDT에 있습니다. 문서 창은 편집 잠금을 증가 및 감소시킵니다. 따라서 사용자가 새 문서 창을 열면 편집 잠금 수가 1씩 증가합니다. 편집 잠금 수가 0에 도달하면 계층 구조에 관련 문서의 데이터를 유지하거나 저장하라는 신호가 전달됩니다. 그런 다음, 계층 구조가 파일로 저장하거나 리포지토리의 항목으로 저장하는 등 어떤 방식으로든 데이터를 저장할 수 있습니다. IVsRunningDocumentTable 인터페이스에서 LockDocument 메서드를 사용하여 편집 잠금 및 읽기 잠금을 추가하고 UnlockDocument 메서드를 사용하여 이러한 잠금을 제거할 수 있습니다.

일반적으로 편집기의 문서 창이 인스턴스화되면 창 프레임이 RDT의 문서에 대해 자동으로 편집 잠금을 추가합니다. 그러나 표준 문서 창을 사용하지 않는 문서의 사용자 지정 보기를 만들 경우(즉, IVsWindowFrame 인터페이스를 구현하지 않음), 자체 편집 잠금을 설정해야 합니다. 예를 들어 마법사에서는 문서를 편집기에서 편집하지 않아도 문서가 편집됩니다. 마법사 및 비슷한 엔터티에서 문서 잠금을 열 수 있도록 하려면 이러한 엔터티가 IVsDocumentLockHolder 인터페이스를 구현해야 합니다. 문서 잠금 홀더를 등록하려면 RegisterDocumentLockHolder 메서드를 호출하고 IVsDocumentLockHolder 구현을 전달합니다. 이렇게 하면 RDT에 문서 잠금 홀더가 추가됩니다. 문서 잠금 홀더를 구현하기 위한 또 다른 시나리오는 특수 도구 창을 통해 문서를 여는 경우입니다. 이 경우에는 도구 창이 문서를 닫도록 할 수 없습니다. 그러나 RDT에 문서 잠금 홀더로 등록함으로써 IDE가 CloseDocumentHolder 메서드 구현을 호출하여 문서를 닫도록 요청할 수 있습니다.

실행 중인 문서 테이블의 다른 용도

IDE의 다른 엔터티는 RDT를 사용하여 문서에 대한 정보를 가져옵니다. 예를 들어 원본 제어 관리자는 RDT를 사용하여 시스템에 문서를 편집기에서 다시 로드하도록 요청하고, 그런 다음, 파일의 최신 버전을 가져옵니다. 이렇게 하기 위해 원본 제어 관리자는 RDT에서 파일을 조회하여 열려 있는 항목이 있는지 확인합니다. 열려 있는 항목이 있으면 원본 제어 관리자가 먼저 계층 구조로 ReloadItem 메서드가 구현되는지 확인합니다. 프로젝트가 ReloadItem 메서드를 구현하지 않으면 원본 제어 관리자가 문서 데이터 개체에서 ReloadDocData 메서드 구현을 직접 확인합니다.

또한 IDE는 RDT를 사용하여 사용자의 문서 요청이 있는 경우 열려 있는 문서를 다시 표면화(앞으로 가져오기)합니다. 자세한 내용은 파일 열기 명령을 사용하여 파일 표시를 참조하세요. RDT에서 파일이 열려 있는지 확인하려면 다음을 수행합니다.

  • 문서 모니커(즉, 전체 문서 경로)를 쿼리하여 항목이 열려 있는지 확인합니다.

  • 계층 구조 또는 항목 ID를 사용하여 프로젝트 시스템에 전체 문서 경로를 요청한 다음, RDT에서 항목을 조회합니다.

참고 항목