Sheng Jiang

A Microsoft MVP in Visual C++

Home     Contact Me     About Me     Site Map     News     Blog     Where is the forum for      
CSDN Digest
Do and Do Not in C
IE Memory Leak
Synchronous IE Printing
Windows Desktop Search
Zip a folder
What is the Windows API for...
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.

 

using

java.util;

 

using

java.util.zip;

 

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();

 

}