-
Notifications
You must be signed in to change notification settings - Fork 23
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 속성을 통해 스트림 단위로 읽을 수도 있습니다.