using System;
using System.IO;
using System.Collections;
using NZlib.Zip;
public class ZipWriter
{
private string mZipFilename;
private string mSrcDir;
private ArrayList mFiles;
private ZipOutputStream mZipStream;
public ZipWriter(string zipfilename, string srcdir, ArrayList files)
{
mZipFilename = zipfilename;
mSrcDir = srcdir;
mFiles = files;
}
public void generate()
{
Open();
foreach (string file in mFiles)
{
string fqpath = mSrcDir + Globals.LocalSlash + file.ToLower();
if (!File.Exists(fqpath))
{
Console.WriteLine("Cannot find file " + fqpath + " for inclusion into zip file " + mZipFilename);
continue;
}
AddFile(fqpath, file.ToLower());
}
Close();
}
private void Open()
{
mZipStream = new ZipOutputStream(new FileStream(mZipFilename, FileMode.Create));
mZipStream.SetLevel(5); // 0 - store only to 9 - means best compression
}
private void Close()
{
mZipStream.Finish();
mZipStream.Close();
}
private void AddFile(string fqpath, string file)
{
AddFileEntry(file);
AddFileContents(fqpath);
}
private void AddFileEntry(string file)
{
mZipStream.PutNextEntry(new ZipEntry(file));
}
private void AddFileContents(string fqpath)
{
byte[] buffer = GetFileContents(fqpath);
mZipStream.Write(buffer, 0, buffer.Length);
}
private byte[] GetFileContents(string fqpath)
{
FileStream fs = File.OpenRead(fqpath);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
return buffer;
}
}
|