중화사전망 - 서예자전 - C# 여러 파일을 하나의 파일로 패키지화하는 방법?

C# 여러 파일을 하나의 파일로 패키지화하는 방법?

방법은 많지만 리소스 관리자를 직접 사용하는 것이 가장 빠릅니다.

제가 말하는 것은 솔루션의 자원 시스템이 아니라 시스템입니다. ResourceReader 및 Writer. 리소스 매니저만큼 풍부한 지원은 없지만 열거 인터페이스만으로도 충분합니다.

나는 약간의 시간을 들여서 너에게 보조 정적 클래스 (ResPacker) 를 직접 썼다. 디버깅이 완료되었으며 주석이 완료되었습니다. 가져가서 쓰다.

사용할까요? 시스템;

사용할까요? 시스템. 소장하다

사용할까요? 시스템. 집합하다. 제네릭

사용할까요? 시스템. 자원;

사용할까요? 시스템. 유로파

사용할까요? 시스템. 그리기;

네임 스페이스? 콘솔 애플리케이션 3

{

반? 프로그램

{

//앞에 쓰기:

// 1. 이 보조 클래스는 원하는 수의 개체를 한 파일에 넣거나 한 번에 꺼낼 수 있도록 도와줍니다.

//2. 나는 서둘러. 나는 try.catch 를 쓰지 않았다, 내가 직접 보충한다.

//3. 서로 다른 유형의 객체를 하나의 파일로 패키지화하지 않는 것이 좋습니다. Image 를 사용하면 모두 Image 가 있고, string 을 사용하면 모두 string 이 있어 나중에 유형을 판단하지 않도록 한다.

//4. 패키지 리소스 파일은 본질적으로 연속 바이트 스트림이므로 중앙에서 파일을 삭제하는 것은 너무 번거롭기 때문에 추가 삭제를 쓰지 않았습니다.

//5. 추가 작업은 덮어쓰기 모드가 아닌 패키지 방법 (나중에 설명) 을 사용하여 강제로 추가할 수 있습니다.

//6. 삭제 작업은 모든 리소스를 읽고 필요 없는 리소스를 제거한 다음 한 번에 쓰기 작업을 덮어쓰는 것이 좋습니다.

//7. 다시,. NET 은 자원 이름에 동일한 이름이나 숫자 접두어를 허용하지 않습니다. 번호 접두사 문제는 내가 처리했고, 중복 이름 문제는 내가 직접 처리했다. 먼저 그것을 기본 키로 사전에 던져서 넣는 것이 가장 좋다.

//8. 파일 점유를 확인하지 않았으므로 포장할 때 포장을 풀지 마십시오.

//9. 이것은 정적 클래스입니다. 고객의 가젯 추가, 제거 및 수정을 위해 이 클래스를 복사하십시오.

//999. 시청해 주셔서 감사합니다! 코드를 마음대로 사용하세요! 만약 네가 문제가 있다면, 나에게 전화해라!

정전기? 무효화? 메인 (string []? 매개변수)

{

//포장

사전< 현,? Object & gt? DicToPack? =? 새 것? 사전< 현,? Object & gt ();

사전 패키지. Add ("키1",이미지. From file(@ "c:\ Users \ 사쿠라이 참 \ pictures \1.jpg));

사전 패키지. 추가 ("키 2", "여보세요?" 세계);

다시 포장하다. 가방 (dict opack);

//압축 해제

사전< 문자열, 개체>? DicRcv=? 다시 포장하다. Getallresources ();

콘솔。 Writeline ((string) dicrcv ["키 2"]);

콘솔。 Writeline (dicrcv ["key1"]. GetType () 을 사용합니다. 전체 이름);

콘솔。 Readkey ();

}

}

공공? 정전기? 반? 다시 포장하다

{

///? & lt 요약>

///? 임의의 객체를 리소스 파일에 일괄 패키지화합니다.

///? & lt/요약 >

///? & ltparam? Name="objCollection "> 패키지화된 객체 목록. 키 값 쌍의 키는 리소스 파일에서 해당 키의 고유 이름입니다. & lt/param & gt;;

///? & ltparam? Name = "targetFilePath"> 대상 자원 파일입니다. 기본 매개변수는 현재 디렉토리에 있는 MyRes.pck 파일입니다. & lt/param & gt;;

///? & ltparam? Name = "overwrite"> 가 기존 대상 파일을 덮어쓸지 여부. 기본값 = 참

공공? 정전기? 무효화? 팩 (idictionary < 문자열, 개체>? 객체 집합,? 문자열? 대상 파일 경로? =? "MyRes.pck",? 부울? 커버? =? 실제)

{

만약? (덮어쓰기)

서류. 삭제 (대상 파일 경로);

사용할까요? (리소스 작성기? Rw? =? 새 것? ResourceWriter(targetFilePath))

{

Foreach? (키 valuepair & lt 현,? Object & gt? 페어링? 네? 객체 컬렉션)

//수신 리소스 이름이 숫자로 시작하지 않도록 리소스 이름은 _로 시작합니다

Rw. AddResource("_ "? +? 한 쌍. 열쇠,? 한 쌍. 값);

Rw. Generate ();

Rw. 닫기 ();

}

}

///? & lt 요약>

///? 리소스 파일을 압축 해제하고 모든 리소스와 해당 리소스 이름을 반환합니다.

///? & lt/요약 >

///? & ltparam? Name = "targetFilePath"> 압축 해제할 자원 파일. 기본값은 현재 디렉토리의 myres. PCK 입니다