C# Sharpziplib 将文件添加到现有存档
我正在尝试使用以下代码将文件添加到现有存档中。运行时不会显示错误或异常,但也不会将文件添加到存档中。有什么想法吗?
using (FileStream fileStream = File.Open(archivePath, FileMode.Open, FileAccess.ReadWrite))
using (ZipOutputStream zipToWrite = new ZipOutputStream(fileStream))
{
zipToWrite.SetLevel(9);
using (FileStream newFileStream = File.OpenRead(sourceFiles[0]))
{
byte[] byteBuffer = new byte[newFileStream.Length - 1];
newFileStream.Read(byteBuffer, 0, byteBuffer.Length);
ZipEntry entry = new ZipEntry(sourceFiles[0]);
zipToWrite.PutNextEntry(entry);
zipToWrite.Write(byteBuffer, 0, byteBuffer.Length);
zipToWrite.CloseEntry();
zipToWrite.Close();
zipToWrite.Finish();
}
}
am trying to add a file to an existing archive using the following code. When run no errors or exceptions are shown but no files are added to the archive either. Any ideas why?
using (FileStream fileStream = File.Open(archivePath, FileMode.Open, FileAccess.ReadWrite))
using (ZipOutputStream zipToWrite = new ZipOutputStream(fileStream))
{
zipToWrite.SetLevel(9);
using (FileStream newFileStream = File.OpenRead(sourceFiles[0]))
{
byte[] byteBuffer = new byte[newFileStream.Length - 1];
newFileStream.Read(byteBuffer, 0, byteBuffer.Length);
ZipEntry entry = new ZipEntry(sourceFiles[0]);
zipToWrite.PutNextEntry(entry);
zipToWrite.Write(byteBuffer, 0, byteBuffer.Length);
zipToWrite.CloseEntry();
zipToWrite.Close();
zipToWrite.Finish();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
在 DotNetZip 中,将文件添加到现有 zip 中非常简单且可靠。
如果要为该新文件指定目录路径,请对 AddFile() 使用不同的重载。
如果要添加一组文件,请使用 AddFiles()。
您不必担心 Close()、CloseEntry()、CommitUpdate()、Finish() 或任何其他问题。
In DotNetZip, adding files to an existing zip is really simple and reliable.
If you want to specify a directory path for that new file, then use a different overload for AddFile().
If you want to add a set of files, use AddFiles().
You don't have to worry about Close(), CloseEntry(), CommitUpdate(), Finish() or any of that other gunk.
从 Codeproject 有人使用了这段代码。唯一的区别是接近并以其他方式完成和写入部分:
顺便说一句:
这是不正确的,大小是 newFileStream.length 否则读取会出错。
你有一个数组,例如 10-1 是 9 个字节长,从 0 到 8。
但是你的读数是从 0 到 9...
From Codeproject someone used this code. Only difference is close and finish otherway around and the write part:
BTW:
This is incorrect, the size is newFileStream.length else the Read goes wrong.
You have an array and you make it for example 10-1 is 9 bytes long, from 0 to 8.
But your reading from 0 to 9...
我认为您的
Finish
调用应该在您的Close
调用之前。更新:这看起来像已知错误。它可能已经被修复 - 您需要检查您的 SharpZipLib 版本以查看它是否包含任何修复。如果没有,您可以通过将所有文件复制到新存档,添加新文件,然后将新存档移动到旧存档名称来解决此问题。
I think your
Finish
call should be before yourClose
call.Update: This looks like a known bug. It's possible it may already have been fixed - you'll need to check your SharpZipLib version to see if it incorporates any fix. If not, you can work around it by copying all files to a new archive, adding the new file, then moving the new archive to the old archive name.
站点根目录中有一个文件夹ZippedFolder,里面有一个存档MyZipFiles。
有一个名为 siteImages 的文件夹,其中包含所有图像文件。
以下是压缩图像的代码,
如果我们有不同的文件格式,并且我们希望您的文件保存在各自的文件夹中,您可以指定代码如下。
现在存档包含两个文件夹
图像 ----> img1.jpg , img2,.jpg
和另一个文件夹
文件 -->客户.pdf、样本.doc
there is a folder ZippedFolder in site's root directory , inside it we have a archive MyZipFiles.
There is a folder with name siteImages which consists of all image files.
The following is the code to zip the images
if we have different file formats and we want your files to be saved in respective folders,you can specify the code as follows.
now the archive contains two folders
images ---- > img1.jpg , img2,.jpg
and another folder
files --> customer.pdf, sample.doc
ZipOutputStream
类不会更新现有的 ZIP 文件。请改用ZipFile
类。The
ZipOutputStream
class does not update existing ZIP files. Use theZipFile
class instead.我找到了一个简单的解决方案,仅将其保留为 ZipFile 和 ZipEntry
I have found a simple solution keeping it to ZipFile and ZipEntry only