7-zip을 사용하여 STDOUT와 출력을 압축 할 수 없습니까?
문제
"구현되지 않은"오류가 발생합니다.
파일을 사용하여 압축하고 싶습니다 7-zip 그런 다음 stdin을 통해 stdout을 통해 데이터를 가져 와서 응용 프로그램으로 더 많은 전환을 수행하십시오. 에서 남자 페이지 이 예를 보여줍니다.
% echo foo | 7Z 더미 -tgzip -si -so> /dev /null
Windows와 C#을 사용하고 있습니다.
결과:
7-Zip 4.65 Copyright (c) 1999-2009 Igor Pavlov 2009-02-03
Creating archive StdOut
System error:
Not implemented
암호:
public static byte[] a7zipBuf(byte[] b)
{
string line;
var p = new Process();
line = string.Format("a dummy -t7z -si -so ");
p.StartInfo.Arguments = line;
p.StartInfo.FileName = @"C:\Program Files\7-Zip\7z.exe";
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.Start();
p.StandardInput.BaseStream.Write(b, 0, b.Length);
p.StandardInput.Close();
Console.Write(p.StandardError.ReadToEnd());
//Console.Write(p.StandardOutput.ReadToEnd());
return p.StandardOutput.BaseStream.ReadFully();
}
파일을 메모리로 읽는 또 다른 간단한 방법이 있습니까?
지금 당장 1) 임시 파일에 쓰고 읽기 (쉽게 코드를 복사/붙여 넣을 수 있음) 2) 파일 파이프 (중간? 나는 한 번도 해본 적이 없음) 3) 다른 것을 사용하십시오.
해결책
Sevenzipsharp와 같은 것을 시도하고 싶을 수도 있습니다 http://www.codeplex.com/sevenzipsharp, 나는 개인적으로 그것을 사용한 적이 없지만 7za.dll com 라이브러리에 래퍼를 제공하여 도움이 될 수 있습니다.
나는 프로세스를 통해 7- Zip을 사용하는 유틸리티를 작성했으며 Stdin과 Stdout 작업을 시도한 적이 없지만 문제가 없었습니다. 내 버전의 7 -zip과 함께 -SI 스위치 상태의 페이지가있는 도움말 파일에서 다음과 같습니다.
참고 : 현재 버전의 7-ZIP는 STDIN의 아카이브 읽기를 지원하지 않습니다.
이것이 문제의 원인 일 수 있는지 확인하십시오. 두 스위치를 모두 지정하면 7-zip이 혼란 스러울 수 있습니다.
도움으로 표시되는 예제는 출력을 표준 아웃으로 리디렉션하는 데 사용되지만 일반 파일 기반 입력이 필요하다는 것을 보여줍니다.
다른 팁
다음은 Igor Pavlov (7Z의 저자)의 정보입니다. "7ZIP는 GZIP/BZIP2의 드롭 인 교체?"
제안은 기본적으로 7z를 an으로 사용하는 것이 었습니다 xz
대리. 그냥 사용합니다 xz
작동해야하지만 멀티 스레드가 아닐 수도 있고 7z 일 수 있습니다.
7z를 사용하려고하는 동안 :
somecommand | 7zr a -si -so | nc -q 2 1.2.3.4 5678
7Z A.7Z -So
그리고
7z e a.7z -si
구현할 수 없습니다. .7Z 형식에는 "SEEK"작업이 필요하기 때문입니다.대신 XZ 형식을 사용하십시오.
7Z A.XZ 파일
모든 모드를 지원해야합니다.
7-zip은 아카이브 이름이 필요하다고 생각합니다.
따라서 a.xz와 같은 아카이브 이름을 지정할 수 있습니다
또는
-스위치를 지정합니다.
최종 해결책은 다음과 같습니다.
cat foo.txt | 7za a -an -txz -bd -si -so | dd of=foo.xz
버그 보고서 이것이 도움을 받아야한다고 제안합니다.
7-ZIP의 현재 버전은 XZ, LZMA, TAR, GZIP 및 BZIP2 아카이브에 대해 Stdin의 아카이브를 읽고 7Z, XZ, GZIP 및 BZIP2 아카이브에 대해서만 Stdin의 파일을 추가합니다.
사용해야 할 수도 있습니다 7za.exe
, 이것은 "명령 선 버전"입니다. 7Z 다운로드 페이지. 나는 당신이 현재 사용하고 있음을 알았습니다 7z.exe
, 그리고 나는 그것이 내가 전에 발생한 문제라고 확신합니다.
사실, 나는 내가 전환했다고 생각합니다 Peazip 문제 때문에 7Z가 나에게주고 있었다. Peazip은 7Z 주변의 래퍼이며 몇 가지 다른 압축 유틸리티이며 Peazip은 명령 줄 인터페이스가 조금 더 좋습니다.
배관 할 때 비슷한 문제가 발생했습니다 stdout
~ 안으로 7zip
명령을 호출하는 대신 Process
직접 명령을 배치 파일에 작성한 다음 배치 파일을 실행합니다. 해킹이지만 작동합니다.