我试图从代码创建一个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) 我正在开发一个系统,我有一个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");
}
}
}
}
我正在尝试使用DotNetZip 1.9在Asp.Net MVC 3中读取上传的zip文件.我已经验证我收到的HttpPostedFileBase对象很好.我可以将它保存到磁盘然后解压缩.但是,首先保存到磁盘似乎很浪费,因为我应该能够直接从内存中解压缩.
从MSDN,HttpPostedFileBase.InputStream属性"获取一个Stream对象,该对象指向上传的文件以准备读取文件的内容".
根据DetNetZip的引用,ZipFile.Read()可以接受Stream对象.所以我试了一下,DotNetZip抛出BadReadException.我附加了显示问题的屏幕截图.
从HttpInputStream解压缩的问题

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

帮助任何人?谢谢
莫因!
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"中,我在网上找不到任何简单的例子有没有办法改变那条路径?我怀疑我有权访问我的虚拟主机.
我有一个非常简单的程序使用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从流解压缩如下:
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),返回FilePathResult或FileStreamResult两者都导致此异常.
我应该在客户端获得不同的流吗?或者如何让服务器返回"可搜索"流?谢谢!
我是使用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)
所以,请帮助开始..先感谢您 ..
我的任务很简单:我有一个受密码保护的 zip 文件,我知道它的密码。我只是想删除密码保护。
我知道使用DotnetZip我可以打开密码保护的 zip 文件,然后将文件复制到新的、未受保护的存档中。但挑战是我想避免重复压缩文件。因此,密码删除应该针对同一个文件“就地”完成,因为它更有效,而且我不再需要受密码保护的文件。
是否可以在C#程序集中嵌入二进制数据(作为资源或其他方法),然后在运行时从程序集中读取二进制数据并将其写为文件.
我正在制作DRM应用程序,目的是数据必须作为嵌入式资源或受密码保护的ZIP文件隐藏在程序集中.因此,我将尝试嵌入资源,如果不可能,那么将寻找具有密码保护的ZIP/UN-ZIP库以保存DRM数据.
我正在用C#编写一个程序,其中应该有二进制数据,它在编译期间在程序集中添加,就像图像一样,在编译时在程序集中添加图标,然后当用户执行程序集时,二进制数据是读取并保存为外部文件.
可能吗?那怎么办呢?
没有类似的问题是我正在寻找的!
以下代码有什么问题?
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)