我有下面的代码, create
一个新的zip文件,然后 add entry
到这个文件 NoCompression
,即 ZERO compression ratio
然后尝试将此条目作为普通文本阅读 .
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文件及其条目都已创建,我可以从Windows资源管理器访问它们,但是一旦代码尝试读取它,就会出现以下错误:
未处理的异常:System.IO.DirectoryNotFoundException:找不到路径'd:\ release.zip \ Readme.txt'的一部分 . System.IO.Win32FileSystem.Open的System.IO.Win32FileStream..ctor(字符串路径,FileMode模式,FileAccess访问,FileShare共享,Int32 bufferSize,FileOptions opti ons,FileStream parent)(String fullPath,FileMode模式,FileAccess访问, System.IO.File.InternalReadAllText(String)中的System.IO.FileStream.Init(String路径,FileMode模式,FileAccess访问,FileShare共享,Int32 bufferSize,FileOptions选项)中的FileShare共享,Int32 bufferSize,FileOptions o ptions,FileStream parent)路径,编码编码)在ConsoleApplication.Program.Main(String [] args)的System.IO.File.ReadAllText(字符串路径)
1 回答
首先应该注意的是,你没有创建一个zip文件,你创建了一个具有特定压缩的存档文件;在您的情况下,您创建了一个没有压缩的ZIP存档 .
我不能,因为我有7zip与
.zip
文件相关联,所以7z打开存档;在您的情况下Windows资源管理器正在为您执行此操作 . 因此,当您浏览到.zip
文件并将其打开时,Explorer会将存档文件视为文件夹并显示存档的内容 .但是,当你这样做时:
System.IO.File.ReadAllText
将打开您传递的特定文件作为参数,在您的情况下为d:\release.zip\Readme.txt
. 所以试图打开的路径是:driveD:
,文件夹release.zip
,文件Readme.txt
...因为d:\release.zip
是 file 而不是 folder ,找不到路径,这就是为什么你得到DirectoryNotFoundException
异常 .对此,如果您想阅读该条目,只需对
Create
存档执行操作,但Open
'ed存档中的Read
除了.GetEntry
而不是.CreateEntry
,例如:希望能有所帮助 .