Zip a directory in C# using J# libraries
This is a modified version of Author: Syed Nasrullah 's method (see
http://www.dotnetspider.com/kb/Article1484.aspx) to include directory information in the zipped file.
java.io.FileOutputStream fos =
new java.io.FileOutputStream(strFileName);
java.util.zip.ZipOutputStream zos =
new java.util.zip.ZipOutputStream(fos);
System.IO.
DirectoryInfo di = new System.IO.DirectoryInfo(
data.CurrentDrive
"\\");
ZipDirectory(fos, zos, di, data.CurrentDrive
"\\");
zos.close();
fos.close();
zos.flush();
fos.flush();
private void ZipDirectory(
java.io.FileOutputStream fos,
java.util.zip.ZipOutputStream zos,
System.IO.
DirectoryInfo di,
String SRootDir)
{
java.io.FileInputStream fis;
java.util.zip.ZipEntry ze;
//to get file info from the directory
System.IO.
FileInfo[] fInfos = di.GetFiles();
foreach(System.IO.FileInfo fInfo in fInfos)
{
Debug.Write(string.Format("Zipping {0}\r\n", fInfo.FullName));
//give the zip entry or the folder arrangement for the file
ze =
new java.util.zip.ZipEntry(
fInfo.FullName.Substring(
SRootDir.LastIndexOf(
"\\") 1
)
);
//The DEFLATED method is the one of the methods to zip a file
ze.setMethod(
ZipEntry.DEFLATED);
zos.putNextEntry(ze);
//Input stream for the file to zip
fis =
new java.io.FileInputStream(fInfo.FullName);
//Copy stream is a simple method to read a file input stream (file to zip) and write it to a file output stream(new zip file)
CopyStream(fis, zos);
zos.closeEntry();
fis.close();
}
//If the directory contains the sub directory the call the same procedure
System.IO.
DirectoryInfo[] dinfos = di.GetDirectories();
foreach (System.IO.DirectoryInfo dinfo in dinfos)
{
Debug.Write(string.Format("Zipping directory {0}\r\n", dinfo.FullName));
ZipEntry dirEntry = new
ZipEntry(
dinfo.FullName.Substring(SRootDir.LastIndexOf(
"\\") 1) Path.DirectorySeparatorChar "."
);
zos.putNextEntry(dirEntry);
ZipDirectory(fos, zos, dinfo, SRootDir);
}
}
void CopyStream(java.io.FileInputStream src, java.util.zip.ZipOutputStream dest)
{
java.io.InputStreamReader reader=
new java.io.InputStreamReader(src);
java.io.OutputStreamWriter writer=
new java.io.OutputStreamWriter(dest);
while (reader.ready())
writer.write(reader.read());
writer.flush();
}