我是使用ICSharpCode.DLL进行文件压缩的,但是在进行压缩是有几个问题不知怎么解决还请各位大虾请教请教!
问题描述:我要压缩文件夹“aaaa”中的文件,其中包含有子文件夹、压缩文件和普通的一些文件;当我在进行压缩时,其中的压缩文件是不能进行压缩的,而子文件夹中的文件则被提到压缩文件的第一级,即:压缩文件:aaaa.rar 然后所有的文件都是直接在这个文件目录下(包括子文件夹中的文件,而没有子文件夹),不像WinRar那样,aaaa.rar-------子文件夹----子文件夹----文件
|
|
|-----压缩文件---文件、子文件夹和文件
|
|
|-----文件
想问各位高手,怎样做到这样???多谢多谢....
问题描述:我要压缩文件夹“aaaa”中的文件,其中包含有子文件夹、压缩文件和普通的一些文件;当我在进行压缩时,其中的压缩文件是不能进行压缩的,而子文件夹中的文件则被提到压缩文件的第一级,即:压缩文件:aaaa.rar 然后所有的文件都是直接在这个文件目录下(包括子文件夹中的文件,而没有子文件夹),不像WinRar那样,aaaa.rar-------子文件夹----子文件夹----文件
|
|
|-----压缩文件---文件、子文件夹和文件
|
|
|-----文件
想问各位高手,怎样做到这样???多谢多谢....
{
//如果文件没有找到,则报错
if (!System.IO.File.Exists(FileToZip))
{
throw new System.IO.FileNotFoundException("The specified file " + FileToZip + " could not be found. Zipping aborderd");
}
System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
//修改 生成文件时的文件名字问题 以及压缩后文件中文件的名字
//修改时间:2007-01-20
ZipEntry ZipEntry = new ZipEntry(FileToZip.Split('\\')[FileToZip.Split('\\').Length - 1]);
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(CompressionLevel);
byte[] buffer = new byte[BlockSize];
System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
ZipStream.Write(buffer, 0, size);
try
{
while (size < StreamToZip.Length)
{
int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
ZipStream.Write(buffer, 0, sizeRead);
size += sizeRead;
}
}
catch (System.Exception ex)
{
throw ex;
}
ZipStream.Finish();
ZipStream.Close();
StreamToZip.Close();
}
/// <summary>
/// 根据传输的参数进行压缩处理
/// 这个参数为 string [] length=2
/// 1:待压缩文件目录
/// 2:压缩后的目标文件
/// Stone修改内容:将压缩后的文件内部的全部路径转换为相对路径
/// Stone修改时间:2006-01-19
/// </summary>
/// <param name="args">1:待压缩文件目录 2:压缩后的目标文件</param>
public void ZipFileMain(string[] args)
{
string[] filenames = Directory.GetFiles(args[0]);
Crc32 crc = new Crc32();
ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));
s.SetLevel(6); // 0 - store only to 9 - means best compression
foreach (string file in filenames)
{
FileStream fs = File.OpenRead(file);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
//如何将全部路径转换为 相对路径 就是一个文件的名字
//注释 修改 2007-01-05
string strTempFile = file.Split('\\')[file.Split('\\').Length - 1];
//------------------------------------------------
ZipEntry entry = new ZipEntry(strTempFile);
entry.DateTime = DateTime.Now;
entry.Size = fs.Length;
fs.Close(); crc.Reset();
crc.Update(buffer); entry.Crc = crc.Value;
//将所有的entry文件路径更改为文件名
s.PutNextEntry(entry); s.Write(buffer, 0, buffer.Length);
}
s.Finish();
s.Close();
}
}