Skip to content

Components Packager

SO HYUN SEOP edited this page Apr 30, 2018 · 20 revisions

파일들로부터 패키지를 생성하고 읽을 수 있는 라이브러리 입니다.
모듈 빌더와 모듈 설치 관리자에 사용되며 독립적으로 동작할 수 있습니다.

패키지 생성 방법

// 패키지 빌더 생성
var builder = new PackageBuilder
{
   Title = "Sample Package",
   Author = "Sample Package Author",
   Version = "1.0.0.0"
};

// 파일 추가
builder.Add(@"C:\Commons\File.dat");

// 폴더의 모든 파일 추가
builder.Add(@"C:\Datas\Dependencies");

// 폴더 그대로 추가
builder.Add(new PackageDirectory(@"C:\Samples"));

// 파일 스트림 추가
builder.Add(new PackageFile("Stream.dat", fileStream));

// 패키지 생성
builder.Create(@"C:\Package.pak");

위와 같은 방법으로 새로운 패키지를 생성할 수 있습니다. 추가된 객체는 Datas 컬렉션에 추가되며 일반적으로 Add 함수와 함께 추가할 파일 또는 폴더의 경로를 입력합니다. 만약 폴더 내부의 내용이 아닌 폴더 자체를 패키지에 추가하고 싶은 경우 PackageDirectory를 생성하여 컬렉션에 추가할 수 있습니다. 만약 패키지 생성 전에 추가한 객체를 제거하고 싶은 경우 Remove 함수를 통해 원하는 객체를 제거할 수 있습니다.

패키지 탐색 방법

var loader = new PackageLoader();
using (var package = loader.Load(@"C:\Package.pak"))
{
   // 패키지 탐색
   foreach (var data in package.Datas)
   {
      // 디렉터리 탐색
      if (data is PackageDirectory dir)
      {
         Console.WriteLine(dir.Children.Count);
      }

      // 파일 탐색
      if (data is PackageFile file)
      {
         Console.WriteLine(file.Name);
      }
   }

   // 패키지 설치
   package.Install(@"C:\Target");
}

위와 같은 방법으로 패키지 내용을 탐색하고 설치할 수 있습니다. 패키지의 데이터는 IPackageData를 구현하고 있으며 폴더는 PackageDirectory 타입, 파일은 PackageFile 타입입니다. 특정 폴더의 하위 내용이 필요한 경우 PackageDirectory의 Children 컬렉션을 열거하여 탐색할 수 있습니다.

선택적 파일 추출

var loader = new PackageLoader();
using (var package = loader.Load(@"C:\Package.pak"))
{
   package.Datas[0].Extract(@"C:\Target");
}

필요한 경우 패키지에서 원하는 데이터를 탐색 후 해당 데이터만 특정 경로에 추출할 수 있으며. 만약 데이터 타입이 파일인 경우 Content 속성을 통해 스트림 단위로 읽을 수도 있습니다.