2014-03-06 150 views
1

我需要你的幫助,我是C#的新手。ZIP壓縮目錄和子目錄中的所有文件(* .txt)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"}); 

我怎麼能只壓縮特定文件類型?

回答

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(); 

}

現在像這樣的東西combinding這一點,從一個特定的文件夾中獲取的文件,你應該如果我沒有錯誤理解你的要求,你有什麼要求嗎?

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。

+0

我認爲這可以幫助我。謝謝你 – user3345868

1

要使用ZipArchive從通配符篩選源創建zip歸檔,併爲符合指定搜索條件的任何文件手動創建ZipArchiveEntry。最後一頁列出了說明這一點的示例。要在具有通配符模式的目錄中搜索,可以使用Directory.GetFiles

相關問題