C# SharpZipLib 去除不相关的目录名称 [英] C# SharpZipLib strips irrelevant directory names

查看:30
本文介绍了C# SharpZipLib 去除不相关的目录名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 SharpZipLib 来压缩包含子目录的文件夹,这工作正常.我想做的是去掉第一个子文件的父目录,这样不相关的整个结构就不会被执行......

I am using SharpZipLib to zip up a folder with subdirectories and this is working fine. What I would like to do is strip off the parents directories of the first child file so the whole structure that is irrelevant isn't carried forth...

示例:

c:\a\b\c\d\e\f\g\h\file1.txt

c:\a\b\c\d\e\f\g\h\file1.txt

c:\a\b\c\d\e\f\g\h\file2.txt

c:\a\b\c\d\e\f\g\h\file2.txt

c:\a\b\c\d\e\f\g\h\i\file1.txt

c:\a\b\c\d\e\f\g\h\i\file1.txt

c:\a\b\c\d\e\f\g\h\i\file2.txt

c:\a\b\c\d\e\f\g\h\i\file2.txt

应该是这样的:

file1.txt

file2.txt

i\file1.txt

i\file1.txt

i\file2.txt

i\file2.txt

我该怎么做?

这是我目前的代码:

        ZipFile zipFile = new ZipFile(destinationArchive);

        zipFile.BeginUpdate();
        foreach (FileInfo file in sourceFiles)
        {
            zipFile.Add(file.FullName);
        }
        zipFile.CommitUpdate();
        
        zipFile.Close();

推荐答案

改用 ZipOutputStream:

Use ZipOutputStream instead:

string[] sourceFiles = new [] { @"c:\a\b\c\d\e\f\g\h\file1.txt", @"c:\a\b\c\d\e\f\g\h\i\file1.txt" };
FileStream fileStream = File.Create(@"c:\temp\test.zip");
ZipOutputStream zipOut = new ZipOutputStream(fileStream);
string baseDir = @"c:\a\b\c\d\e\f\g\h\";
foreach (var sourceFile in sourceFiles)
{
    ZipEntry entry = new ZipEntry(sourceFile.Replace(baseDir,""));
    zipOut.PutNextEntry(entry);

    FileStream inFile =  File.OpenRead(sourceFile);
    byte[] buffer = new byte[8192];
    int bytesRead = 0;
    while ((bytesRead = inFile.Read(buffer, 0, buffer.Length)) > 0)
    {
        zipOut.Write(buffer,0,bytesRead);
    }
    zipOut.CloseEntry();                
}
zipOut.Close();

这篇关于C# SharpZipLib 去除不相关的目录名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆