Tag: zipfile

将大文件添加到IO.Compression.ZipArchiveEntry会抛出OutOfMemoryExceptionexception

我正在尝试使用以下代码将大型video文件(~500MB)添加到ArchiveEntry: using (var zipFile = ZipFile.Open(outputZipFile, ZipArchiveMode.Update)) { var zipEntry = zipFile.CreateEntry(“largeVideoFile.avi”); using (var writer = new BinaryWriter(zipEntry.Open())) { using (FileStream fs = File.Open(@”largeVideoFile.avi”, FileMode.Open)) { var buffer = new byte[16 * 1024]; using (var data = new BinaryReader(fs)) { int read; while ((read = data.Read(buffer, 0, buffer.Length)) > 0) { writer.Write(buffer, 0, read); } […]

从C#的zip文件中读取二进制文件而不解压缩

我想从zip文件中读取二进制文件而不解压缩它。 zip文件结构: zipFolderName/subFolder/BinFile 在BinFile中,我有: Id1, id2, value1 // id1, id2 are string, value1 is int 在C#中: ZipEntry binFileName = …; // it has been got from zipFile entries MemoryStream ms = new MemoryStream(); binFileName.Extract(ms); using (BinaryReader reader = new BinaryReader(ms)) { string id1 = reader.ReadString(); // error popped here string id2 = reader.ReadString(); int value1 […]

“IBM437”不是ZipFile Read Method支持的编码名称

我的代码执行此操作时出现问题: using (ZipFile archive = ZipFile.Read(File)) //<== Crash Here! { foreach (ZipEntry entry in archive.Entries) { entry.Extract(UnZipFolder.Name.ToString(), ExtractExistingFileAction.OverwriteSilently); } } 当ZipFile尝试读取我的文件,它是一个字符串并包含,sincrofit.zip然后崩溃并抛出此exception时崩溃: ‘System.ArgumentException’附加信息:’IBM437’不是受支持的编码名称。

从文件夹中的所有文件创建zip文件

我正在尝试从文件夹中的所有文件创建一个zip文件,但无法在线找到任何相关的代码段。 我正在尝试做这样的事情: DirectoryInfo dir = new DirectoryInfo(“somedir path”); ZipFile zip = new ZipFile(); zip.AddFiles(dir.getfiles()); zip.SaveTo(“some other path”); 很感谢任何forms的帮助。 编辑:我只想压缩文件夹中的文件,而不是它的子文件夹。

如何从C#内存中的文件创建ZipArchive?

是否有可能从内存中的文件(而不是实际上在磁盘上)创建ZipArchive。 以下是用例:在IEnumerable变量中接收多个文件。 我想使用ZipArchive将所有这些文件压缩在一起。 问题是ZipArchive只允许CreateEntryFromFile ,它需要一个文件路径,因为我只有内存中的文件。 问题:有没有办法在ZipArchive使用’stream’创建’entry’,这样我就可以直接在zip中输入文件的内容? 我不想先保存文件,创建zip(从保存文件的路径),然后删除单个文件。 这里, attachmentFiles是IEnumerable using (var ms = new MemoryStream()) { using (var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create, true)) { foreach (var attachment in attachmentFiles) { zipArchive.CreateEntryFromFile(Path.GetFullPath(attachment.FileName), Path.GetFileName(attachment.FileName), CompressionLevel.Fastest); } } … }

在Mac上的C#上使用DotNetZip压缩文件

我试图在使用DotNetZip的mac上使用以下代码片段在C#中压缩文件或目录。 但是下面我有一些例外,我做错了什么? using Ionic.Zip; namespace CSLab { class Program { static void Main(string[] args) { using (ZipFile zip = new ZipFile()) { zip.Password = “password”; zip.AddDirectory(“./test”); zip.Save(“a.zip”); } } } } Unhandled Exception: System.ArgumentException: ‘IBM437’ is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. […]

加密的zip文件是否也可以保护其内部目录

我正在使用WinZip AES 256使用DotNetZip创建一个加密的zip文件。但是我能够读取目录甚至删除一些没有加密密钥的zipentries。 据我所知,目录可见性是Zip格式的限制。 我只是想知道,如果这也适用于删除/添加组件到zip文件的任何更改,或者是否存在防止此类更改的方法。 编辑: 快速阅读Zip文件格式似乎表明,双重压缩似乎是防止随机删除/添加zip文件中的 comoponents的唯一解决方案,无论单个条目的加密。

Zip条目名称以目录分隔符字符结尾但包含数据

System.IO.Compression.ZipFile.ExtractToDirectory(zipPath, extractPath); 在C#中使用ZipFile,我正在尝试从已知位置提取文件,并且它抛出以下错误:System.IO.Exception:Zip条目名称以目录分隔符字符结尾但包含数据 我做了一些研究,在MSDN中解释了ExtractToDirectory但是找不到这个错误定义。 你能解释为什么会发生这种错误吗? 来自MSDN: IOExceptionexception destinationDirectoryName指定的目录已存在。 -要么- 存档中条目的名称为空,仅包含空格,或至少包含一个无效字符。 -要么- 提取存档条目将创建一个位于destinationDirectoryName指定的目录之外的文件。 (例如,如果条目名称包含父目录访问器,则可能会发生这种情况。) -要么- 要提取的存档条目与已从同一存档中提取的条目具有相同的名称。

将一个非常大的二进制文件逐步转换为Base64String

我需要帮助将非常大的二进制文件(ZIP文件)转换为Base64String并再次返回。 这些文件太大而无法一次性加载到内存中(它们会抛出OutOfMemoryExceptions),否则这将是一项简单的任务。 我不想单独处理ZIP文件的内容,我想处理整个ZIP文件。 问题: 我可以将整个ZIP文件(测试大小从1 MB到目前的800 MB)转换为Base64String,但是当我将其转换回来时,它已损坏。 新的ZIP文件是正确的大小,它被Windows和WinRAR / 7-Zip等识别为ZIP文件,我甚至可以查看ZIP文件内部并查看具有正确尺寸/属性的内容,但是当我试图从ZIP文件中提取,我得到:“错误:0x80004005”这是一般错误代码。 我不确定腐败发生的地点或原因。 我做了一些调查,我注意到以下几点: 如果您有一个大文本文件,您可以逐步将其转换为Base64String而不会出现问题。 如果在整个文件上调用Convert.ToBase64String ,则会产生: “abcdefghijklmnopqrstuvwx” ,然后在文件中调用两个部分将产生: “abcdefghijkl”和“mnopqrstuvwx” 。 不幸的是,如果文件是二进制文件,那么结果就不同了。 虽然整个文件可能会产生: “abcdefghijklmnopqrstuvwx” ,尝试将其分为两部分会产生类似: “oiweh87yakgb”和“kyckshfguywp” 。 有没有办法逐步基础64编码二进制文件,同时避免这种损坏? 我的代码: private void ConvertLargeFile() { FileStream inputStream = new FileStream(“C:\\Users\\test\\Desktop\\my.zip”, FileMode.Open, FileAccess.Read); byte[] buffer = new byte[MultipleOfThree]; int bytesRead = inputStream.Read(buffer, 0, buffer.Length); while(bytesRead > 0) { byte[] secondaryBuffer […]

如何使用C#4.0从文件夹解压缩所有.Zip文件,而不使用任何OpenSource Dll?

我有一个包含.ZIP文件的文件夹。 现在,我想使用C#将ZIP文件解压缩到特定文件夹,但不使用任何外部程序集或.Net Framework 4.5。 我搜索过,但没有找到任何使用Framework 4.0或更低版本解压缩* .zip文件的解决方案。 我尝试过GZipStream,但它只支持.gz而不支持.zip文件。