压缩文件包含盘符问题
[code=C]#/// <summary>
/// 压缩指定目录下指定文件(包括子目录下的文件)
/// </summary>
/// <param >args[0]为你要压缩的目录所在的路径
/// 例如:D:\\temp\\ (注意temp 后面加 \\ 但是你写程序的时候怎么修改都可以)</param>
/// <param >args[1]为压缩后的文件名及其路径
/// 例如:D:\\temp.zip</param>
/// <param >文件过滤, 例如*.xml,这样只压缩.xml文件.</param>
public bool ZipFileMain(string zippath, string zipfilename, string fileFilter)
{
//string filenames = Directory.GetFiles(args[0]);
try
{
Crc32 crc = new Crc32();
ZipOutputStream outStream = new ZipOutputStream(File.Create(zippath + zipfilename));
outStream.SetLevel(6); // 0 - store only to 9 - means best compression
DirectoryInfo di = new DirectoryInfo(zippath);
FileInfo[] files = di.GetFiles(fileFilter);
cutStr = zippath.Trim();
//压缩这个目录下的所有文件
writeStream(ref outStream, files, crc);
//压缩这个目录下子目录及其文件
//direct(di, ref s, crc);
outStream.Finish();
outStream.Close();
}
catch (Exception exp)
{
return false;
}
Upload(zippath,zipfilename);
return true;
}
/// <summary>
/// 文件压缩成zip格式
/// </summary>
/// <param name="outStream"></param>
/// <param name="files"></param>
/// <param name="crc"></param>
private void writeStream(ref ZipOutputStream outStream, FileInfo[] files, Crc32 crc)
{
foreach (FileInfo fi in files)
{
//string fifn = fi.FullName;
FileStream fs = fi.OpenRead();
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
//ZipEntry entry = new ZipEntry(file); Path.GetFileName(file)
string file = fi.FullName;
file = file.Replace(cutStr, "");
ZipEntry entry = new ZipEntry(file);
entry.DateTime = DateTime.Now;
entry.Size = fs.Length;
fs.Close();
crc.Reset();
crc.Update(buffer);
entry.Crc = crc.Value;
outStream.PutNextEntry(entry);
outStream.Write(buffer, 0, buffer.Length);
}
}[/code]
用以上方法实现压缩文件,问题是:当文件存在根盘符下面时,压缩文件中包含一个盘符文件夹(E_),打开该文件夹才能找到文件。