2008-11-03 2 views
2

나는 디렉토리 아카이브가 % TEMP % 디렉토리에 임의의 이름의 디렉토리에 있습니다는 내 C# 응용 프로그램 내부

의에 아카이브를 추출하는 7Z 프로세스를 실행 예를

C : \ 문서 및 설정 \ 사용자 \ 로컬 설정 \ 온도 vtugoyrc.fd2

(fullPathFilename = "C \ : \ Documents 및 로컬 설정 \ 설정 \ 사용자가 \ 임시 \의 vtugoyrc .fd2 \ xxx.7z ")

내 코드는 다음과 같습니다

sevenZipProcessInfo.FileName = SEVEN_ZIP_EXECUTABLE_PATH; 
sevenZipProcessInfo.Arguments = "x " + fullPathFilename; 
sevenZipProcessInfo.WindowStyle = ProcessWindowStyle.Hidden; 
sevenZipProcessInfo.UseShellExecute = true; 
sevenZipProcessInfo.WorkingDirectory = Path.GetDirectoryName(fullPathFilename); 
Process sevenZipProcess = Process.Start(sevenZipProcessInfo); 
if (sevenZipProcess != null) 
{ 
    sevenZipProcess.WaitForExit(); 
    if (sevenZipProcess.ExitCode != 0) 
     ...exit code is 2 (fatal error by the 7z help) 

이 어디에서 더 정교한 문서를 찾을 수 있습니까?

답변

5

외부 프로세스로 7 Zip을 사용하고 있습니다. 명령 행에서 직접 명령을 호출하는 것과 같습니다.

파일을 압축/압축 해제하려면 실제 라이브러리를 사용하는 것이 좋습니다. C# 프로젝트에서 참조 할 수있는 것.

Sharp Zip Lib 상당히 잘 reknowned되지만 프로세스가 false로 인 UseShellExecute를 설정하고, 표준 출력/표준 오류 리디렉션 수/표준 출력 표준 오류에 오류를 기록하는 가정하고 7zip과 아카이브

+0

그러나 적어도 표준 7z 라이브러리는 하나의 파일에 여러 개의 파일을 보관하는 경우에만 파일 레벨에서만 지퍼를 제공하기 때문에 선택하지 마십시오 – Hanan

2

를 사용을 heres 특정 wrapper library; MSDN here (stderr) 및 here (stdout)에 대한 예제가 있습니다. 당신은 모두 표준 에러 표준 출력, 사용 WaitForExit()에서 읽을해야하는 경우

, 다음 일이 더 흥미 얻을 - 보통 몇 스레드 또는 비동기 방법 중 하나를 포함.

다른 한 마지막 옵션은 명령에 파이프 리디렉션을 사용하는 것입니다 - 즉 1>out.txt 2>&1 -이 파이프 out.txt에 표준 출력, 및 파이프는 표준 출력에 stderr에, 그래서이 이 out.txt가됩니다. 그런 다음 out.txt에서 읽습니다.

+0

오류 메시지가 표시되는 방식 문제를 지적한 것은 단순히 명령 줄 (cmd)을 사용하여 똑같은 것을 실행하는 것이 었습니다. – Hanan

0

도움 주시면 감사하겠습니다.

아무튼 문제는 '긴 경로명'-> 명령 줄 프로세스가 C : \ Documents and Settings \ (이름의 공백으로 인해)를 찾을 수 없다는 것입니다. 이것에 대한 해결책은 찾을 수 있습니다 여기 standard way to convert to short path in .net