2012-02-21 4 views
3

압축 된 CSV 파일의 첫 번째 줄만 읽으려고합니다. 아래 코드를 사용했지만 "GZIP 헤더의 매직 넘버가 정확하지 않습니다"라는 오류 메시지가 나타납니다. 분명히 GZIP과 ZIP은 동일한 형식이 아니지만 DotNetZipLib 라이브러리 나 SharpZip을 사용할 때조차도 작동하지 않는 것 같습니다.C# 읽기 전용 첫 번째 줄, 압축 된 텍스트 파일의 StreamReader 사용

using (GZipStream gzipStream = new GZipStream(File.OpenRead(fileName), CompressionMode.Decompress)) 
      { 
       using(StreamReader sr = new StreamReader(gzipStream)) 
       { 
        //Matt try something like this as a hint/starting point 
        While(sr.Read()) 
        { 
         row = sr.ReadLine(); 
        } 

       } 
      } 

당신의 표준 zip 파일을 처리하기 위해 (gzip을하지 않음) 내가 쉽게 압축 된 텍스트 파일의 첫 번째 줄을 읽을 수 있도록 StreamReader 개체로 콘텐츠를 스트리밍하는 방법을 알고 있나요? 필자는 텍스트 파일을 열기 전에 전체 zip 파일의 압축을 완전히 풀어주는 솔루션을 찾지 않습니다. 위와 비슷한 해결책을 찾고 있지만 zip 파일을 처리 할 수있는 솔루션을 찾습니다. 또한 바이트 배열을 통해 괴상한 경로를 이동하고 첫 번째 행 (데이터 유형, 구분 기호 ...)의 정확한 내용에 대한 지식이 필요하므로 배열에서 첫 번째 행을 재구성해야합니다.

감사

예를 들어
+0

GZip과 Zip이 동일하지 않기 때문에 우리에게 말한 오류가 있습니다. DotNetZipLib 또는 SharpZip을 사용하면 어떻게됩니까? –

+0

"C# StreamReader를 사용하여 압축 된 파일을 읽는 방법"거기에 예제가있는 TONS가 있습니다. Matt – MethodMan

+0

GZip과 Zip은 같은 것이 아닙니다. 반드시 DotNetZipLib 또는 SharpZip과 같은 것을 사용해야합니다. 시도한 코드를 게시 할 수 있습니까? 그리고 아마도 우리는 당신에게 조언 할 수 있습니까? –

답변

1

매트 여기 당신은뿐만 아니라 할 수있는 일이이 SharpZipLib 라이브러리를 사용하여이 코드 샘플 체크 아웃입니다

var zip = new ZipInputStream(File.OpenRead(@"C:\MyZips\myzip.zip")); 
var filestream = new FileStream(@"C:\\MyZips\myzip.zip", FileMode.Open, FileAccess.Read); 
ZipFile zipfile = new ZipFile(filestream); 
ZipEntry item; 
while ((item = zip.GetNextEntry()) != null) 
{ 
    Console.WriteLine(item.Name); 
    using (StreamReader s = new StreamReader(zipfile.GetInputStream(item))) 
    { 
     // stream with the file 
      Console.WriteLine(s.ReadToEnd()); 
    } 
} 
+0

바로 확인해 주시면 감사하겠습니다. –

+0

Matt ..나는 당신의 좌절감을 이해할 수 있습니다. – MethodMan

+0

DJ KRAZE, 작품, 고마워요. 특히 라이브러리와 함께 StreamReader를 사용하는 것에 대한 참조를 볼 수 없기 때문에이 작업을 수행하는 데 3 시간을 낭비했습니다. 굉장해, 너 더 많은 두통을 덜어 줬어. –

-1

나를 위해 위의 대답 didnt 한 작업 (이에 오류가 주조 런타임 : "item"에 대한 nullreference) 코드를 약간 수정했습니다. "text.txt"라는 텍스트 파일은 "archive.zip"이라는 압축 파일로 압축되었습니다.)이 파일은 VB.NET에 있으며 SHARPZIPLIB 라이브러리 (VB로 가져 와서 public 클래스 mainform 전에 호출해야합니다.

지금 (내가 개인 서브 button_click에 넣어) 개인 하위에 다음 코드를 넣어 u는 코드를 실행하면

 Imports ICSharpCode.SharpZipLib.Zip 

'

 Dim zip As New ZipInputStream(File.OpenRead("c:\archive.zip")) 'location of the zip file 
     Dim filestream As New FileStream("c:\archive.zip", FileMode.Open,FileAccess.Read) 
     Dim zipfile As ZipFile = New ZipFile(filestream) 

     Dim item As ICSharpCode.SharpZipLib.Zip.ZipEntry 
     item = New ZipEntry("text.txt") 

     While (Not (zip.GetNextEntry) Is Nothing) 
      Console.WriteLine(item.Name) 
      Dim s As StreamReader = New StreamReader(zipfile.GetInputStream(item)) 
      ' stream with the file 
      MsgBox(s.Readline) 

     End While 
     end sub 

, 메시지 상자 것 :

여기에 코드입니다 텍스트 파일의 첫 번째 줄에 입력 한 텍스트 팝업 text.txt 희망이 도움이됩니다. 건배!

+0

나는 VB.Net이 아니라 (포트에 쉽게 임에도 불구하고) C#을 지정했다. 또한, 저의 대답이 저에게 도움이되었습니다. –