2010-10-21 10 views

Odpowiedz

22

Musisz spakować pliki i zapisać wynik w odpowiedzi. Można użyć biblioteki kompresji SharpZipLib.

przykładem Kod:

Response.AddHeader("Content-Disposition", "attachment; filename=" + compressedFileName + ".zip"); 
Response.ContentType = "application/zip"; 

using (var zipStream = new ZipOutputStream(Response.OutputStream)) 
{ 
    foreach (string filePath in filePaths) 
    { 
     byte[] fileBytes = System.IO.File.ReadAllBytes(filePath); 

     var fileEntry = new ZipEntry(Path.GetFileName(filePath)) 
     { 
      Size = fileBytes.Length 
     }; 

     zipStream.PutNextEntry(fileEntry); 
     zipStream.Write(fileBytes, 0, fileBytes.Length); 
    } 

    zipStream.Flush(); 
    zipStream.Close(); 
} 
+0

To świetnie ... zasługuje na przegraną. Czy wiesz, czy istnieje jakiś sposób na poznanie skompresowanego rozmiaru? Chcę móc poinformować użytkowników o wielkości pobranych plików po ich skompresowaniu. – pearcewg

+1

@pearcewg, myślę, że w tym przypadku rozwiązanie zależy od Twoich wymagań. Jeśli wiesz, jaka będzie zawartość archiwów, możesz skompresować pliki przed wygenerowaniem strony i po prostu pokazać rozmiar archiwów. Jeśli zawartość archiwów może się różnić, to jest to nietrywialne. Moje myśli to: 1. podanie informacji o wielkości skompresowanych plików w bazie danych 2. pokaż przybliżony rozmiar skompresowanych plików zgodnie ze statystykami kompresji. – bniwredyc

+0

działa jak urok. Dzięki –

1

Utwórz plik ZIP w locie przy użyciu http://www.icsharpcode.net/opensource/sharpziplib/.

+0

Czy można utworzyć w formacie rar ,,, – deepu

+0

@deepu prawdopodobnie będziesz musiał użyć rar.exe utworzyć plik rar. – Fedearne

+0

Wątek ten zawiera informacje dotyczące RAR: http://stackoverflow.com/questions/1025863/read-content-of-rar-files-using-c. –

0

The 3 biblioteki znam są SharpZipLib (uniwersalne formaty), DotNetZip (wszystko ZIP), a ZipStorer (mały i kompaktowy). Brak linków, ale wszystkie są na codeplex i znalezione przez google. Licencje i dokładne funkcje różnią się.

Szczęśliwe kodowanie.

3

To jak to zrobić drogę DotNetZip: DI ręczyć za DotNetZip bo użyłem go i jest to zdecydowanie najprostszy biblioteka kompresji dla C# Natknąłem :)

Odjazd http://dotnetzip.codeplex.com/

http://dotnetzip.codeplex.com/wikipage?title=CS-Examples&referringTitle=Examples

Utwórz pobrany plik ZIP w programie ASP.NET. Ten przykład tworzy dynamicznie zip w ramach metody odświeżania ASP.NET, a następnie pobiera ten plik zip do przeglądarki żądającej poprzez Response.OutputStream. Żadne archiwum zip nigdy nie jest tworzone na dysku.

+0

Witaj .. Dziękuję za tę Nicei odpowiedź .. Ale chcę wiedzieć, czy mogę zmienić nazwę pliku przed dodaniem do zip (przed komendą zip.AddFile). Mówię o pliku, który zostanie dodany do ZIP, a nie nazwa pliku zip. –

Powiązane problemy