2016-12-10 1 views
-1

I했습니다 아래 코드, 다음 일반 텍스트로이 항목을 읽으려고 createNoCompressionZERO compression ratio이 파일에 다음 add entry 새로운 zip 파일 있음 ."ZERO"압축 비율과 함께 "우편 번호"파일에서 파일의 텍스트를 읽는

using System; 
using System.IO; 
using System.IO.Compression; 

namespace ConsoleApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (FileStream zipToOpen = new FileStream(@"d:\release.zip", FileMode.Create)) 
      { 
       using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create)) 
       { 
        ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt", CompressionLevel.NoCompression); 
        using (StreamWriter writer = new StreamWriter(readmeEntry.Open())) 
        { 
          writer.WriteLine("Information about this package."); 
          writer.WriteLine("========================"); 
        } 
       } 
      } 

      string text = System.IO.File.ReadAllText(@"d:\release.zip\Readme.txt"); 
      Console.WriteLine("Contents of WriteText.txt = {0}", text); 
     } 
    } 
} 

zip 파일 및 해당 항목 모두 생성, 나는 윈도우 탐색기에서 액세스 할 수 있지만, 코드 시도가 읽어되면, 아래의 오류 얻을 : 첫째

Unhandled Exception: System.IO.DirectoryNotFoundException: Could not find a part of the path 'd:\release.zip\Readme.txt'. at System.IO.Win32FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions opti ons, FileStream parent) at System.IO.Win32FileSystem.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions o ptions, FileStream parent) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) at System.IO.File.InternalReadAllText(String path, Encoding encoding)
at System.IO.File.ReadAllText(String path) at ConsoleApplication.Program.Main(String[] args)

+4

음 ... zip 파일을 일반 디렉토리로 처리 할 수 ​​없습니다. 'd : \ release.zip \ Readme.txt' 경로가 유효하지 않습니다. 익스플로러가 사용자가 거기를 검색하고 텍스트 파일을 읽도록하기위한 추가 단계가 필요하기 때문에 실제 경로가되지는 않습니다. 날 믿지 않니? 명령 프롬프트를 열고'dir d : \ release.zip \ Readme.txt'를 입력하고 무슨 일이 일어나는 지보십시오. zip 파일을 압축하지 않고 추가하면 압축되지 않은 내용을 추가했기 때문에 zip 파일 크기가 작아지지 않습니다. –

답변

4

을 당신은 압축 파일을 만들지 않았고, 당신은 특정 압축을 가진 압축 파일을 만들었습니다. 귀하의 경우 압축없이 ZIP 아카이브를 만들었습니다. 내가 .zip 파일과 관련된 7zip과이 있기 때문에

and I can access them from the windows explorer

내가 할 수없는, 그래서 7Z 아카이브를 엽니 다; 귀하의 경우 Windows 탐색기가이를 수행합니다. 따라서 .zip 파일을 탐색하여 열면 탐색기에서 보관 파일을 폴더로 처리하고 보관 파일의 내용을 표시합니다. 그러나

,이 작업을 수행 :

string text = System.IO.File.ReadAllText(@"d:\release.zip\Readme.txt"); 

System.IO.File.ReadAllText 당신이 경우에 d:\release.zip\Readme.txt 인 매개 변수로 전달할 특정 파일을 엽니 다. 그래서 개방을 시도하는 경로는 다음과 같습니다 드라이브 D:, 폴더 release.zip, Readme.txt 파일 ... d:\release.zip파일 아닌 폴더 때문에, 경로는 당신이 DirectoryNotFoundException 예외를 얻고있는 이유입니다 찾을 수 없습니다. 당신이 항목을 읽으려면 여기에

, 당신은 Open '에드 아카이브에서 Read.GetEntry 대신 .CreateEntry, 예를 제외하고, 아카이브를 Create 위해 한 일을 수행

string text = string.Empty; 
using (FileStream zipToOpen = new FileStream(@"c:\test\release.zip", FileMode.Open)) { 
    using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read)) { 
     ZipArchiveEntry readmeEntry = archive.GetEntry("Readme.txt"); 
     using (StreamReader reader = new StreamReader(readmeEntry.Open())) { 
      text = reader.ReadToEnd(); 
     } 
    } 
} 
Console.WriteLine("Contents of WriteText.txt = {0}", text); 

희망 도울 수있다.