ZIP压缩目录和子目录c#中的所有文件(* .txt)

时间:2014-03-06 07:38:13

标签: c# file compression zip

我需要你的帮助,我是C#的新手。

我有一个压缩文件夹及其所有文件和文件夹的程序,但我想压缩特定类型的文件。

我使用此代码进行压缩:

if (!File.Exists(name_of_zip_folder))
{
    ZipFile.CreateFromDirectory(folder, name_of_zip_folder);
}

我想做以下事情:

public void Zipfunction(string folder, List<string> files_to_compress){
    //compress these kind of files, keeping the structur of the main folder
}

例如:

Zipfunction(main_folder, new List<string> { "*.xlsx", "*.html"});

我怎么才能只压缩特定的文件类型?

2 个答案:

答案 0 :(得分:1)

这是Jan Welker (Originally posted here)的代码段,其中显示了如何使用SharpZipLib压缩单个文件

private static void WriteZipFile(List<string> filesToZip, string path, int compression)
{

if (compression < 0 || compression > 9)
    throw new ArgumentException("Invalid compression rate.");

if (!Directory.Exists(new FileInfo(path).Directory.ToString()))
    throw new ArgumentException("The Path does not exist.");

foreach (string c in filesToZip)
    if (!File.Exists(c))
        throw new ArgumentException(string.Format("The File{0}does not exist!", c));


Crc32 crc32 = new Crc32();
ZipOutputStream stream = new ZipOutputStream(File.Create(path));
stream.SetLevel(compression);

for (int i = 0; i < filesToZip.Count; i++)
{
    ZipEntry entry = new ZipEntry(Path.GetFileName(filesToZip[i]));
    entry.DateTime = DateTime.Now;

    using (FileStream fs = File.OpenRead(filesToZip[i]))
    {
        byte[] buffer = new byte[fs.Length];
        fs.Read(buffer, 0, buffer.Length);
        entry.Size = fs.Length;
        fs.Close();
        crc32.Reset();
        crc32.Update(buffer);
        entry.Crc = crc32.Value;
        stream.PutNextEntry(entry);
        stream.Write(buffer, 0, buffer.Length);
    }
}
stream.Finish();
stream.Close();

}

现在将这个与这样的东西结合起来,从特定文件夹中获取文件,如果我没有理解你的请求,你应该得到你所要求的东西吗?

var d = new DirectoryInfo(@"C:\temp");
FileInfo[] Files = d.GetFiles("*.txt"); //Get txt files
List<string> filesToZip = new List<string>();
foreach(FileInfo file in Files )
{
    filesToZip.add(file.Name);
}

希望它有所帮助 // KH。

答案 1 :(得分:1)

要从通配符过滤源创建zip存档,请使用ZipArchive并为符合指定搜索条件的任何文件手动创建ZipArchiveEntry。最后一页列出了一个说明这一点的示例。要在具有通配符模式的目录中搜索,您可以使用Directory.GetFiles