c# 7zip 예제

나는 추출 할 수 없습니다 . 택시 및 . LZMA 아카이브 사용 C # 인터페이스 래퍼, 조건에서 다른 아카이브를 볼 때,나는 7zip C ++ 소스 코드를 볼 수, 택시 COM + GUID 23170f69-40c1-278a-1000-00011008000이 맞다면, 당신은 나를 도울 수 있습니까? 다행히 관리되는 클래스 System.Runtime.InteropServices.Marshal에는 이러한 “포인터”를 개체로 변환하는 데 사용할 수 있는 GetObjectForNativeVariant 메서드가 있습니다. 그러나이 방법은 모든 PropVariant 형식 (예 : VT_FILETIME)을 처리하지 않으므로 이러한 경우 GetObjectForNativeVariant 메서드를이 번역에 추가했습니다. 이것은 이제까지 행 위의 paramter로 전달 무엇 7zip폴더에 폴더를 압축하는 기능입니다 backupfolder의 디렉토리를 압축하고 datetime_7zip.7z 업데이트 (1.2)로 이름을 변경 : PropVariant 처리와 관련된 복잡성의 대부분은 이제 특별한 숨겨져 있습니다 Prop변형 구조. 그리고 인터페이스 메서드는 이제 IntPtr 대신 PropVariant을 반환합니다. 내 자신의 프로젝트에 대한 아카이브 작업 할 수있는 기능을 가지고이 모듈을 만들었습니다. 현재 내 프로젝트에는 추출 기능만 있으므로 7-Zip 인터페이스의이 부분만 C #로 변환됩니다. 나중에 나는 뿐만 아니라 압축 기능을 번역 할 계획이다. 당신이 필요로하는 경우 지금은이 코드, 그리고 7-우편 소스 코드와 함께, 혼자서 구현 할 수 있습니다. 7-Zip은 7-Zip의 웹 사이트에 따라 다음 형식을 지원하는 오픈 소스 보관 응용 프로그램입니다: adoconnection/SevenZipExtractor에서 새 릴리스에 대한 알림을 받고 싶습니까? 7-Zip 인터페이스는 속성 값에 변형(PropVariant)을 사용합니다. C#은 클래스와 같은 변형을 지원하지 않으며 이러한 모든 매개 변수는 IntPtr로 C#에서 구현됩니다.

이것은 호환성을 위해 수행되며 프로젝트에서 안전하지 않은 코드를 사용하지 않기 때문입니다. 7-Zip은 자체 인터페이스를 통해 파일과 함께 작동하므로 디스크또는 메모리에서 파일을 열려면 클래스에서 하나 이상의 필요한 인터페이스를 구현해야합니다. 이러한 래퍼 클래스는 이 번역에도 있습니다(표준 .NET Stream 클래스를 둘러싸기). 공개 bool 압축 폴더 (문자열 백업 폴더) { 시도 { 세븐지압축기 sz = 새로운 세븐지압축기(); 세븐지.세븐지압축기.세트라이브러리패스(DLLPath); sz.압축 수준 = 압축 수준.울트라; sz.압축 모드 = 압축 모드.만들기; sz.압축 메소드 = 압축 방법.기본값; Sz. 빠른 압축 = true; sz.CompressDirectory (backupFolder, BackupPath + “” + DateTime.Now.Date.ToString (“yyyyMMddHHmms”) + “_7Zip.7z”); 디렉터리.삭제(backupFolder, true); true를 반환합니다. } 캐치 (예외 ex) { throw ex; } 아카이브 DLL과의 모든 통신은 COM과 유사한 인터페이스로 수행됩니다(COM과 유사하며 COM이 아닌 COM은 알려진 문제 섹션에서 볼 수 있음).