2012-05-22 6 views
0

나는 응용 프로그램을 작성 중이며 폴더 안에 gz 파일의 압축을 풀 필요가 있습니다.C에서 폴더 안에있는 모든 gz 파일을 추출하십시오.

내가 필요한 것은 주어진 폴더에있는 모든 gz 파일을 반복하여 같은 폴더에 추출 할 수있는 C# 스크립트입니다.

내가 어떤 도서관이 거기에 알고,하지만 그들이 GZ 작동 얻을 수 없었던, 난 그들이 비록 우편을 위해 일하고 있어요.

또는 동일을 달성하기 위해 WinRAR과 명령 행 유틸리티를 사용할 수 있습니다 같은 즉 다른 어떤 솔루션 배치 스크립트를 생성 할 수있는 경우가있는 경우. 나는 가능한 한 아이디어 만 알지 못합니다.

참고 : WinRar 명령은 RAR 파일 만 처리 할 수있는 두 번째 옵션을 삭제해야한다고 생각합니다.

감사

+0

가능한 중복 [다운로드 C#에서 사이트 맵 GZ 파일 압축을 해제하는 방법?] (http://stackoverflow.com/questions/1573269/how-to-download-and-unzip-a -sitemap-gz-file-in-c) –

+0

무엇이 문제입니까? 디렉토리의 모든 파일을 반복하는 데 문제가 있거나 gz 파일의 압축을 풀면 문제가 발생합니다. –

+0

@ThorstenDittmar 압축 풀기가 gz 파일입니다. – Ankit

답변

1

해결되었습니다. MichelZ에게가는 길을 보여 주신 것에 감사드립니다. 나에게는 트릭을 수행하기 위해 7-zip 명령 행 버전이 있습니다.

@REM ------- BEGIN demo.cmd ---------------- 
@setlocal 
@echo off 
set path="C:\Program Files\7-Zip\";%path% 
for /F %%i in ('dir /s/b *.gz') do call :do_extract "%%i" 
for /F %%i in ('dir /s/b *.zip') do call :do_extract "%%i" 
goto :eof 

:do_extract 
pushd %~dp1 
7z e %1 -y 
popd 
REM ------- END demo.cmd ------------------ 
1

WinRAR과의 "수 UnRAR"명령 행 프리웨어 배치 파일로이 시도 :

@REM ------- BEGIN demo.cmd ---------------- 
@setlocal 
@echo off 
set path="C:\Program Files\WinRAR\";%path% 
for /F %%i in ('dir /s/b *.gz') do call :do_extract "%%i" 
goto :eof 

:do_extract 
echo %1 
mkdir %~1.extracted 
pushd %~1.extracted 
unrar e %1 
popd 

REM ------- END demo.cmd ------------------ 

의례의 : http://www.respower.com/page_tutorial_unrar

+0

감사합니다.이 박쥐 파일을 실행하는 데 도움 주시겠습니까? 명령 프롬프트에서이 명령을 실행하려면 무엇을해야합니까? gz가있는 폴더의 경로를 어떻게 전달합니까? – Ankit

+0

그냥 "현재 폴더"걸릴 것이므로 * .gz와 같은 폴더에 배치 파일을 복사 한 다음 거기에서 실행해야합니다. – MichelZ

+0

"xxxx"는 RAR이 아닙니다. 그러나 그 gz 파일을 마우스 오른쪽 버튼으로 클릭하고 여기를 클릭하면 성공적으로 추출됩니다. – Ankit

0

나는 다음과 같은 것을 제안 할 수 있습니다 :

using System; 
using System.IO; 
using System.Linq; 

class Program 
{ 
    static void Main(string[] args) 
    { 

     try 
     { 
      var files = from file in Directory.EnumerateFiles(@"c:\something", 
          "*.gz", SearchOption.AllDirectories) 
         select new 
         { 
          File = file, 
         }; 

      foreach (var f in files) 
      { 
       Process.Start("c:\winrar.exe", f.File); 
      } 
      Console.WriteLine("{0} files found and extracted!", 
       files.Count().ToString()); 
     } 
     catch (UnauthorizedAccessException UAEx) 
     { 
      Console.WriteLine(UAEx.Message); 
     } 
     catch (PathTooLongException PathEx) 
     { 
      Console.WriteLine(PathEx.Message); 
     } 
    } 
} 

NOTE: Please replace paths and winrar.exe parameters yourself with correct one.

+0

Directory.EnumerateFiles 메소드가 .net 3.5에없는 것 같습니다. 이 작업을 .net 3.5에서 얻으시겠습니까? – Ankit

+0

@Ankit, .net 3.5에서 Directory.GetFiles (http://msdn.microsoft.com/en-us/library/07wt70x2.aspx)를 사용할 수 있습니다. –

-1
@setlocal 
@echo off 
set path="C:\Program Files\WinRAR\";%path% 
for /F %%i in ('dir /s/b *.gz') do call :do_extract "%%i" 
goto :eof 

:do_extract 
echo %1 
mkdir %~1.extracted 
pushd %~1.extracted 
Winrar e %1 
popd 
+0

좀 이상하게 보입니다. 기음#... –

관련 문제