标签: dotnetzip

使用dotnetzip在zip文件中创建虚拟目录树

我试图从代码创建一个zip文件,我正在使用dotnetzip

我想在磁盘上不存在的文件夹中创建目录树.我该怎么做呢?

我尝试过使用AddDirectory但似乎想在磁盘上找到目录.我也尝试过AddEntry,但这需要一些内容.

我的文件使用FileStream选项存储在SQL Server中,并在那里以层次结构进行组织.

我写了这个递归方法来做它,但AddDirectory行不起作用.

    private void GetFiles(ZipFile zipFile, Folder folder, string path)
    {
        zipFile.AddDirectory(folder.FolderName, path);

        foreach (var file in folder.Files)
            zipFile.AddEntry(file.FileName, file.FileData);

        foreach(var subfolder in folder.SubFolders)
        {
            GetFiles(zipFile, subfolder, path + "\\" + subfolder.FolderName);
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# dotnetzip

2
推荐指数
1
解决办法
2710
查看次数

DotNetZip - 如何在不创建单独文件的情况下保存回原始流

我正在开发一个系统,我有一个Stream(可以搜索),我正在读取一个ZIP文件,然后我将修改后的ZIP文件写回该流.这样做会导致文件损坏.这可以使用以下代码演示:


using System;
using System.Collections.Generic;
using System.Text;
using Ionic.Zip;
using System.Windows.Forms;
using System.IO;
namespace ziptester
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            OpenFileDialog mdlg = new OpenFileDialog();
            mdlg.ShowDialog();
            Stream fstream = File.Open(mdlg.FileName,FileMode.Open,FileAccess.ReadWrite);
            ZipFile mfile = ZipFile.Read(fstream);
            mfile.UpdateEntry("test.txt", new byte[500]);
            fstream.Position = 0;
            mfile.SaveProgress += new EventHandler(mfile_SaveProgress);
            mfile.Save(fstream);


            Console.ReadKey();
        }

        static void mfile_SaveProgress(object sender, SaveProgressEventArgs e)
        {
            if (e.EventType == ZipProgressEventType.Saving_Completed)
            {
                Console.WriteLine("Save completed");
            }
        }
    }
}

.net c# stream dotnetzip

2
推荐指数
1
解决办法
711
查看次数

无法使用DotNetZip 1.9从HttpInputStream中读取zip文件

我正在尝试使用DotNetZip 1.9在Asp.Net MVC 3中读取上传的zip文件.我已经验证我收到的HttpPostedFileBase对象很好.我可以将它保存到磁盘然后解压缩.但是,首先保存到磁盘似乎很浪费,因为我应该能够直接从内存中解压缩.

从MSDN,HttpPostedFileBase.InputStream属性"获取一个Stream对象,该对象指向上传的文件以准备读取文件的内容".

根据DetNetZip的引用,ZipFile.Read()可以接受Stream对象.所以我试了一下,DotNetZip抛出BadReadException.我附加了显示问题的屏幕截图.

从HttpInputStream解压缩的问题 从HttpInputStream解压缩的问题

InputStream的值,Length与上传的zip文件的值相匹配 InputStream的值,Length与上传的zip文件的值相匹配

帮助任何人?谢谢

c# asp.net dotnetzip asp.net-mvc-3

2
推荐指数
1
解决办法
2765
查看次数

DotNetZip保存位置

莫因!

 using (ZipFile zip = new ZipFile())
 {
     // add this map file into the "images" directory in the zip archive
     zip.AddFile("c:\\images\\personal\\7440-N49th.png", "images");
     // add the report into a different directory in the archive
     zip.AddFile("c:\\Reports\\2008-Regional-Sales-Report.pdf", "files");
     zip.AddFile("ReadMe.txt");
     zip.Save("MyZipFile.zip");
 }
Run Code Online (Sandbox Code Playgroud)

这个例子将MyZipFile.zip存储在"C:\ Program Files(x86)\ IIS Express"中,我在网上找不到任何简单的例子有没有办法改变那条路径?我怀疑我有权访问我的虚拟主机.

c# zip dotnetzip

2
推荐指数
1
解决办法
1万
查看次数

DotNetZip间歇性地挂起

我有一个非常简单的程序使用DotNetZip(最新版本)和C#.Net,VS2010.当它试图保存已压缩的文件时,它已经开始挂起.没有错误消息,没有任何消息.它运行很长时间,然后突然开始显示这种间歇性症状.我在MS Server 2003上使用批处理系统运行它,但我在Win7上测试它.两种系统都会产生间歇性故障.大约80%的时间都失败了.

想法?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ionic.Zip;

namespace ZipUpSourceFiles
    {
    class Program
        {
        static void Main(string[] args)
            {
            string YYYYMMM = DateTime.Today.ToString("yyyy-MMM");
            string TargetPath = @"\\winntdom\root\common\xxx\secure\Construction\Access\All Database Backup\" + YYYYMMM + @"_Backup\";
            string SourcePath = @"\\winntdom\root\common\xxx\secure\Construction\Access\YYYY\";
            string ZipName=DateTime.Today.ToString("yy-MM-dd") + @".zip";
            string ZipWithPath = TargetPath + ZipName;

            if (!System.IO.Directory.Exists(TargetPath))
                {
                    Console.WriteLine("Creating Directory");
                    System.IO.Directory.CreateDirectory(TargetPath);
                }
            if (System.IO.File.Exists(ZipWithPath))
                {
                    Console.WriteLine("Deleting file"); 
                    System.IO.File.Delete(ZipWithPath);
                }
            using (ZipFile zip = new ZipFile())
                {
                    Console.WriteLine("Zipping up Directories");
                    zip.AddDirectory(SourcePath); // recurses …
Run Code Online (Sandbox Code Playgroud)

c# dotnetzip

2
推荐指数
1
解决办法
1363
查看次数

DotNetZip失败,"流不支持搜索操作"

我在C#中使用DotNetZip从流解压缩如下:

public static void unzipFromStream(Stream stream, string outdir)
{   //omit try catch block
    using (ZipFile zip = ZipFile.Read(stream)){
        foreach (ZipEntry e in zip){
            e.Extract(outdir, ExtractExistingFileAction.OverwriteSilently);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用流获得流

WebClient client = new WebClient();
Stream fs = client.OpenRead(url);
Run Code Online (Sandbox Code Playgroud)

但是,我得到以下异常

exception during extracting zip from stream System.NotSupportedException: This stream does not support seek operations.
at System.Net.ConnectStream.get_Position()
at Ionic.Zip.ZipFile.Read(Stream zipStream, TextWriter statusMessageWriter, Encoding encoding, EventHandler`1 readProgress)
Run Code Online (Sandbox Code Playgroud)

在服务器端(ASP.NET MVC 4),返回FilePathResultFileStreamResult两者都导致此异常.

我应该在客户端获得不同的流吗?或者如何让服务器返回"可搜索"流?谢谢!

c# asp.net-mvc stream dotnetzip

2
推荐指数
1
解决办法
1147
查看次数

如何在c#.net项目中添加Ionic.Zip.dll并使用它从文件夹创建一个zip?

我是使用Visual Studio 2010 Express的c#.net新手.我有一个从文件夹创建zip文件的任务,其中包含图像文件和一些文本文件.我被Ionic.Zip.dll用来压缩文件夹.但我不知道从哪里开始.我创建了ac #project和一个带有文件夹路径并返回.zip文件路径的函数 .我不知道如何将这个dll添加到我的项目中以及如何使用它.我找到了很多代码片段,但是如何开始......

以下是我准备制作拉链的功能:

 public static String Zip(String folderPath)
        {
            String zipFilePath = null;
            try
            {


            }
            catch (Exception ex)
            {
                MessageBox.Show("" + ex.Message, "LN Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return zipFilePath;
        }
Run Code Online (Sandbox Code Playgroud)

所以,请帮助开始..先感谢您 ..

c# dotnetzip

2
推荐指数
1
解决办法
1万
查看次数

以编程方式从 zip 文件中删除已知密码

我的任务很简单:我有一个受密码保护的 zip 文件,我知道它的密码。我只是想删除密码保护。

我知道使用DotnetZip我可以打开密码保护的 zip 文件,然后将文件复制到新的、未受保护的存档中。但挑战是我想避免重复压缩文件。因此,密码删除应该针对同一个文件“就地”完成,因为它更有效,而且我不再需要受密码保护的文件。

.net c# zip password-protection dotnetzip

2
推荐指数
1
解决办法
1393
查看次数

是否可以在.NET程序集中嵌入二进制数据

是否可以在C#程序集中嵌入二进制数据(作为资源或其他方法),然后在运行时从程序集中读取二进制数据并将其写为文件.

我正在制作DRM应用程序,目的是数据必须作为嵌入式资源或受密码保护的ZIP文件隐藏在程序集中.因此,我将尝试嵌入资源,如果不可能,那么将寻找具有密码保护的ZIP/UN-ZIP库以保存DRM数据.

我正在用C#编写一个程序,其中应该有二进制数据,它在编译期间在程序集中添加,就像图像一样,在编译时在程序集中添加图标,然后当用户执行程序集时,二进制数据是读取并保存为外部文件.

可能吗?那怎么办呢?

.net c# embedded-resource dotnetzip

2
推荐指数
2
解决办法
2282
查看次数

DotNetZip - 无法访问封闭的Stream

没有类似的问题是我正在寻找的!

以下代码有什么问题? files是文件内容的文本数组,fileNames是相应的文件名数组.

这个代码总是在使用Save方法的倒数第二行失败,但我不明白为什么要关闭流!

result = new MemoryStream();

using (ZipFile zipFile = new ZipFile())
{
    for (int i = 0; i < files.Count(); i++)
    {
        System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
        Byte[] bytes = encoding.GetBytes(files[i]);
        using (MemoryStream fs = new MemoryStream(bytes))
        {
            zipFile.AddEntry(fileNames[i], fs);
        }
    }
    zipFile.Save(result);
}
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助 - 在这里绝望!

这是我基于@ spender的第一条评论的解决方案,尽管他在下面发布的解决方案可能更好.

        try
        {
            result = new MemoryStream();
            List<Stream> streams = new List<Stream>();

            if (files.Count > 0)
            {
                using (ZipFile zipFile = new ZipFile())
                {
                    for (int …
Run Code Online (Sandbox Code Playgroud)

c# dotnetzip

1
推荐指数
1
解决办法
3557
查看次数