문제

"구현되지 않은"오류가 발생합니다.

파일을 사용하여 압축하고 싶습니다 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

Igor Pavlov가 말합니다:

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 직접 명령을 배치 파일에 작성한 다음 배치 파일을 실행합니다. 해킹이지만 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top