正如 Nickolay 指出的那样,正在使用“deflate”方法而不是“store”。找到解决这个问题的方法对我来说真的很痛苦,对于发现这个主题的其他人来说,我使用 Jaime Olivares 的 ZipStorer 类来添加使用“store”的 mimetype。
https://github.com/jaime-olivares/zipstorer
将此代码添加到 C# 项目(它不是 DLL)很容易,并且使用“store”而不是“deflate”很容易添加文件。这是我的代码:
Dictionary<string, string> FilesToZip = new Dictionary<string, string>()
{
{ ConfigPath + @"mimetype", @"mimetype"},
{ ConfigPath + @"container.xml", @"META-INF/container.xml" },
{ OutputFolder + Name.Output_OPF_Name, @"OEBPS/" + Name.Output_OPF_Name},
{ OutputFolder + Name.Output_XHTML_Name, @"OEBPS/" + Name.Output_XHTML_Name},
{ ConfigPath + @"style.css", @"OEBPS/style.css"},
{ OutputFolder + Name.Output_NCX_Name, @"OEBPS/" + Name.Output_NCX_Name}
};
using (ZipStorer EPUB = ZipStorer.Create(OutputFolder + "book.epub", ""))
{
bool First = true;
foreach (KeyValuePair<string, string> File in FilesToZip)
{
if (First) { EPUB.AddFile(ZipStorer.Compression.Store, File.Key, File.Value, ""); First = false; }
else EPUB.AddFile(ZipStorer.Compression.Deflate, File.Key, File.Value, "");
}
}
此代码创建一个完全有效的 EPUB 文件。但是,如果您不需要担心验证,似乎大多数电子阅读器都会接受带有“deflate”mimetype 的 EPUB。因此,我之前使用 .NET 的 ZipArchive 的代码生成了在 Adobe Digital Editions 和 PocketBook 中工作的 EPUB。例如:
/*using (ZipArchive EPUB = ZipFile.Open(OutputFolder + Name.Output_EPUB_Name, ZipArchiveMode.Create))
{
foreach (KeyValuePair<string, string> AddFile in AddFiles)
{
if (AddFile.Key.Contains("mimetype"))
{
EPUB.CreateEntryFromFile(AddFile.Key, AddFile.Value, CompressionLevel.NoCompression);
}
else EPUB.CreateEntryFromFile(AddFile.Key, AddFile.Value, CompressionLevel.Optimal);
}
}*/