我需要你的帮助,我是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"});
我怎么才能只压缩特定的文件类型?
答案 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。