Avatar billede cogitans Nybegynder
27. marts 2006 - 14:08 Der er 16 kommentarer og
2 løsninger

Unzippe en komrimeret fil

Findes der klasser i .Net Frameworket, som tilbyder funktioanlitetten, at man kan dekomprimere zip-filer inde fra koden?

Hvis der gør, vil jeg meget gerne se et simpelt eksempel.
Avatar billede dr_chaos Nybegynder
27. marts 2006 - 14:11 #1
Der findes ingen indbyggede metoder til det.
Du skal bruge en ekstern komponent.
Prøv at kigge her:
http://dotnet.org.za/thea/archive/2006/01/17/49337.aspx
Avatar billede cogitans Nybegynder
27. marts 2006 - 16:02 #2
Inde på det site, der tales der meget om, at det programmøren opdagede, ikke kunne bruges aligevel. Men han skriver alligevel dette kode:

using ICSharpCode.SharpZipLib.Zip;

FastZip fz = new FastZip();       
fz.ExtractZip(zipFile, targetDirectory,"");

Vil det sige, at det stykke kode klarer problemmet?
Avatar billede cogitans Nybegynder
27. marts 2006 - 16:04 #3
Eller hvad med denne:

ZipFile zip = new ZipFile(ZipPath);
//List compressed files
foreach(ZipEntry compfile in zip) {
if (compfile.IsFile) {
//call compfile.Name to ge the file name Notice it includes relative path
}
}

???
Avatar billede arne_v Ekspert
27. marts 2006 - 16:21 #4
foelgende kode har jeg selv lavet og testet saa jeg ved den virker:

using System;
using System.Collections;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;

class MainClass
{
    public static void Main(string[] args)
    {
        ZipFile zf = new ZipFile(@"C:\z.zip");
        IEnumerator e = zf.GetEnumerator();
        while(e.MoveNext())
        {
            ZipEntry ze = (ZipEntry)e.Current;
            Stream istm = zf.GetInputStream(ze);
            Stream ostm = new FileStream(@"C:\" + ze.Name, FileMode.CreateNew, FileAccess.Write);
            byte[] b = new byte[100000];
            int n;
            while((n = istm.Read(b, 0, b.Length)) > 0)
            {
                ostm.Write(b, 0, n);
            }
            ostm.Close();
        }
        zf.Close();
    }
}
Avatar billede cogitans Nybegynder
27. marts 2006 - 16:26 #5
Hvad med:
"using ICSharpCode.SharpZipLib.Zip;"
og
"zipfile"

er det objekter, som kun er  tilgængelig, hvis man har winzip installeret?
Og hvad sker der i eksemplet? Bliver indholdet skrevet ud til en zipfil? For meningen er jo også, at man kan åbne en zipfil...?
Avatar billede arne_v Ekspert
27. marts 2006 - 16:41 #6
det kraever at man har hente #ZipLib

http://www.icsharpcode.net/OpenSource/SharpZipLib/

og har en reference til dens dll
Avatar billede cogitans Nybegynder
28. marts 2006 - 15:53 #7
Det fungerer fint nok. Men hvad så, når man skal have det pakket ned igen? Så skal processen vel "bare" vendes om? Men har du også et eksempel på det?
Avatar billede arne_v Ekspert
28. marts 2006 - 15:56 #8
using System;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;

class TestClass
{
    public const int N = 100;
    public static void Main(string[] args)
    {
        ZipOutputStream zos = new ZipOutputStream(new FileStream(@"C:\Test.zip", FileMode.Create));
        for(int i = 0; i < N; i++)
        {
            FileStream fs = new FileStream(@"C:\Test.doc", FileMode.Open);
            byte[] b = new byte[fs.Length];
            fs.Read(b, 0, b.Length);
            fs.Close();
            ZipEntry ze = new ZipEntry("Test" + i + ".doc");
            zos.PutNextEntry(ze);
            zos.Write(b, 0, b.Length);
        }
        zos.Finish();
        zos.Close();
    }
}
Avatar billede arne_v Ekspert
28. marts 2006 - 16:01 #9
bemaerk at eksempelt er lidt specielt men du burde klart fremgaa hvordan
man skriver til en ZIP fil
Avatar billede cogitans Nybegynder
28. marts 2006 - 16:24 #10
hmm...jeg fik ikke lige fat i den i denne omgang. Og jeg skal til at afsted nu. Men der skulle gerne kunne pakkes mere end 1 fil ned til samme zip-fil...
Avatar billede arne_v Ekspert
28. marts 2006 - 16:30 #11
det goer den ogsaa

den gemmer 100 filer i zip filen

i mit specielle tilfaelde bare 100 koper af samme fil

det skal du bare aendre
Avatar billede segato Nybegynder
29. marts 2006 - 15:31 #12
Hvis man kun vil anvende .net framework og ikke 3. parts komponenter findes der et zip namespace i j# man kan anvende i c#.
Avatar billede cogitans Nybegynder
30. marts 2006 - 13:55 #13
Jeg vil lige se på det med flere filer.

Men et eksempel i j# ville da også være dejligt.
Avatar billede segato Nybegynder
30. marts 2006 - 14:03 #14
Man koder nu stadig i c#, klasserne man bruger er bare i j#

http://codeproject.com/csharp/VmEasyZipUnZip.asp
Avatar billede arne_v Ekspert
22. april 2006 - 21:33 #15
tid at få afsluttet her ?
Avatar billede cogitans Nybegynder
22. april 2006 - 22:36 #16
Ja, det er det da. Men jeg har både kunnet bruge svarerne fra arve_v og segato. Så hvis i lige vil lægge et svar begge 2, så skal jeg give point.
Avatar billede arne_v Ekspert
22. april 2006 - 22:46 #17
fra mig
Avatar billede segato Nybegynder
24. april 2006 - 09:49 #18
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester