c# – 使用Zip库创建Epub文件
大家好,
我试图压缩一个Epub文件我已经使用c# 我试过的事情 > Dot Net Zip http://dotnetzip.codeplex.com/ 在所有情况下,mimetype文件是添加到存档并且未压缩的第一个文件 我使用的Epub验证器是epubcheck http://code.google.com/p/epubcheck/ 如果任何人成功地使用这些库之一压缩了一个epub文件,请让我知道如何或者如果有人将任何其他开放源代码压缩api也可以工作的压缩文件成功地压缩一个epub文件. 编辑 DotNetZip的工作原理,请看下面接受的答案. 解决方法
如果您需要控制ZIP文件中条目的顺序,可以使用DotNetZip和ZipOutputStream.
你说你尝试过DotNetZip,它(epub验证器)给你一个错误的抱怨mime类型的东西.这可能是因为您在DotNetZip中使用ZipFile类型.如果您使用ZipOutputStream,您可以控制zip条目的顺序,这对epub显然很重要(我不知道格式,只是猜测). 编辑 我刚刚检查,epub page on Wikipedia描述了如何格式化.epub文件.它说,mimetype文件必须包含特定的文本,必须是未压缩和未加密的,并且必须显示为ZIP存档中的第一个文件. 使用ZipOutputStream,您可以通过在特定ZipEntry上设置CompressionLevel = None来实现此功能,该值不是默认值. 以下是一些示例代码: private void Zipup() { string _outputFileName = "Fargle.epub"; using (FileStream fs = File.Open(_outputFileName,FileMode.Create,FileAccess.ReadWrite )) { using (var output= new ZipOutputStream(fs)) { var e = output.PutNextEntry("mimetype"); e.CompressionLevel = CompressionLevel.None; byte[] buffer= System.Text.Encoding.ASCII.GetBytes("application/epub+zip"); output.Write(buffer,buffer.Length); output.PutNextEntry("META-INF/container.xml"); WriteExistingFile(output,"META-INF/container.xml"); output.PutNextEntry("OPS/"); // another directory output.PutNextEntry("OPS/whatever.xhtml"); WriteExistingFile(output,"OPS/whatever.xhtml"); // ... } } } private void WriteExistingFile(Stream output,string filename) { using (FileStream fs = File.Open(fileName,FileMode.Read)) { int n = -1; byte[] buffer = new byte[2048]; while ((n = fs.Read(buffer,buffer.Length)) > 0) { output.Write(buffer,n); } } } 请参阅ZipOutputStream here的文档. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |