Oprettet lør. d. 28. august 2010 kl. 19:35:49

DSDM
DSDM (3.390 point. Point ude: 50)
www.d-zig.com

Zip eller rar filer i c#

Er der en nem måde at håndtere zip eller rar filer med c#? uden alt muligt 3 parts halløj? (: skal egentlig bare udpakke en zip fil til en mappe på mit websted efter den er blevet uploadet.

Skrevet lør. d. 28. august 2010 kl. 22:19:01| #1

arne_v
arne_v (1.005.623 point)
Der er ikke indbygget support for ZIP arkiver i .NET framework (kun for den rå ZIP algoritme).

Men SharpZipLib virker fint !

http://www.icsharpcode.net/ (...)

Skrevet søn. d. 29. august 2010 kl. 13:14:01| #2

DSDM
DSDM (3.390 point)
www.d-zig.com
ehm!? Hvad for en af de 2 skal jeg hente? og hvordan får jeg det til at virke?

Skrevet søn. d. 29. august 2010 kl. 13:16:54| #3

DSDM
DSDM (3.390 point)
www.d-zig.com
jeg skal hente Assemblies ikke? (: men hvilken en af bil filerne er det så? jeg bruger framework 3,5

Skrevet søn. d. 29. august 2010 kl. 14:07:27| #4


Skrevet søn. d. 29. august 2010 kl. 15:47:40| #5

DSDM
DSDM (3.390 point)
www.d-zig.com
skriv et nyt svar i min nye trår. kom til at give mig selv her :/ sorry

Skrevet søn. d. 29. august 2010 kl. 20:27:26| #6

buzzzz
buzzzz (46.576 point)
ifyoudo.net
Men du fik det til at virke?

Jeg bruger selv 7zip, og deres format, da det giver bedre compression, hvilket var målet for mig. Men SharpLib er klart vejen, hvis du bare skal udpakke filer.

mvh

Skrevet søn. d. 29. august 2010 kl. 22:13:51| #7

DSDM
DSDM (3.390 point)
www.d-zig.com
ja fik det til at virke. (: MEN!, hvis jeg vil udpakke en zip fil hvor der er mapper, i så fejler den?

Skrevet søn. d. 29. august 2010 kl. 22:16:21| #8

arne_v
arne_v (1.005.623 point)
Hvis du viser en lille kode snippet, så kan vi sikkert få det til at virke!

Skrevet søn. d. 29. august 2010 kl. 22:20:10| #9

DSDM
DSDM (3.390 point)
www.d-zig.com
public string Unzip(string FilePath, string outFolder)
    {
        string Return = "";
        ZipInputStream zipInputStream = new ZipInputStream(File.OpenRead(FilePath));
        ZipEntry zipEntry = zipInputStream.GetNextEntry();
        while (zipEntry != null)
        {
            string entryFileName = zipEntry.Name;


            byte[] buffer = new byte[4096];        // 4K is optimum


            string fullZipToPath = Path.Combine(outFolder, entryFileName);
            string directoryName = Path.GetDirectoryName(fullZipToPath);
            if (directoryName.Length > 0)
                Directory.CreateDirectory(directoryName);


            using (FileStream streamWriter = File.Create(fullZipToPath))
            {
                StreamUtils.Copy(zipInputStream, streamWriter, buffer);
            }
            zipEntry = zipInputStream.GetNextEntry();

            Return = entryFileName;
        }

        return Return;
    }

Skrevet søn. d. 29. august 2010 kl. 22:22:14| #10

DSDM
DSDM (3.390 point)
www.d-zig.com
using (FileStream streamWriter = File.Create(fullZipToPath))

Det er den linje der fejler hvis der er mapper med i zip filen

Skrevet søn. d. 29. august 2010 kl. 22:25:41| #11

buzzzz
buzzzz (46.576 point)
ifyoudo.net
Hvad fejler den med?

Den burde komme med en exception af en art :-)

Skrevet søn. d. 29. august 2010 kl. 22:30:57| #12

DSDM
DSDM (3.390 point)
www.d-zig.com
gør den da os (:

DirectoryNotFoundException was unhandled by user code

Could not find a part of the path 'F:\---\---\---\------\---\---\---\---\'.


har lige sløret stien

Skrevet søn. d. 29. august 2010 kl. 22:40:11| #13

buzzzz
buzzzz (46.576 point)
ifyoudo.net
Jeg undre mig en smule over den kode ... hvorfor lave output dir i hvert gennemløb af din while løkke ?

og hvad giver output af:
if (directoryName.Length > 0)

Jeg ville formode at den ikke opretter det directory du regner med ...

Skrevet søn. d. 29. august 2010 kl. 22:54:25| #14

arne_v
arne_v (1.005.623 point)
Kan Path.Combine håndtere dit dir format og ZIP's format med / mellem dirs?

Skrevet søn. d. 29. august 2010 kl. 22:57:18| #15

DSDM
DSDM (3.390 point)
www.d-zig.com
if (directoryName.Length > 0)

Den er jo egentlig overflødig, kan jeg se.


da jeg ikke kender så meget til SharpZipLib har jeg det meste af koden her fra --> http://wiki.sharpdevelop.net/ (...)

Det er det nederste eksempel på siden.

hvorfor lave output dir i hvert gennemløb af din while løkke ? det forstår jeg ikke helt hvad du mener med? :s

Skrevet søn. d. 29. august 2010 kl. 23:07:32| #16

buzzzz
buzzzz (46.576 point)
ifyoudo.net
Ahhh, min hjerne der var stået af der :-)

Kan se det gøres på en lidt andet måde jeg plejede ( tror jeg nok ) ... dog kan jeg ikke finde det jeg brugte. har vist mistet soruce.

Men kan du ikke debug igennem det, og så se hvad de forskellige variable indeholder, for at se hvorfor den siger dit bibliotek ikke findes ... og specielt hvad for et der ikke findes ... det burde jo være oprettet lidt længere oppe, altså før den smider din exception.

Skrevet søn. d. 29. august 2010 kl. 23:18:04| #17

DSDM
DSDM (3.390 point)
www.d-zig.com
kan du komme med en lille guide til hvordan jeg gør det? :I

Skrevet søn. d. 29. august 2010 kl. 23:27:21| #18

buzzzz
buzzzz (46.576 point)
ifyoudo.net
VS -> Debug -> Exception:

Sæt flueben ved "Common Language Runtime Exception" ud for "Thrown" kolonnen.

Derefter kør dit program: F5

Så burde den break når der bliver smidt en exception, og du kan så se de forskellige værdier.

ellers manuelt udskriv dem i din kode.

Skrevet man. d. 30. august 2010 kl. 00:12:25| #19

DSDM
DSDM (3.390 point)
www.d-zig.com
nu har jeg kigget alle steder, der er sikkert noget jeg overser!? Men kan ikke finde ud af hvorfor det virker når zipfilen ikke indeholder mapper og ellers ikke

Skrevet man. d. 30. august 2010 kl. 00:20:15| #20

buzzzz
buzzzz (46.576 point)
ifyoudo.net
Igen, den skriver at dit bibliotek ikke findes:
DirectoryNotFoundException

Det synes jeg er en god søge retning ... og derfor udksriv noget data til console eller andre steder ... for at se hvad der går galt.

Den må jo på en eller anden måde ikke få oprettet det bibliotek du prøver at udpakke den ...

Er du sikker på at "zipEntry.Name" rent faktisk indeholder et navn ? og ikke bare en tom string, det ville jo forklare lidt om hvorfor det ik' virker.

Skrevet man. d. 30. august 2010 kl. 02:35:41| #21

arne_v
arne_v (1.005.623 point)
Følgende kode virker hos mig:

using System;
using System.Collections;
using System.IO;

using ICSharpCode.SharpZipLib.Zip;

namespace E
{
    public class Program
    {
        public static void Unzip(string fnm, string dir)
        {
            ZipFile zf = new ZipFile(fnm);
            foreach(ZipEntry ze in zf)
            {
                string fullloc = Path.Combine(dir, ze.Name.Replace('/', Path.DirectorySeparatorChar));
                string locdir = Path.GetDirectoryName(fullloc);
                if(!Directory.Exists(locdir))
                {
                    Directory.CreateDirectory(locdir);
                }
                if(!fullloc.EndsWith(Path.DirectorySeparatorChar.ToString()))
                {
                    Stream istm = zf.GetInputStream(ze);
                    Stream ostm = new FileStream(fullloc, 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();
        }
        public static void Main(string[] args)
        {
            Unzip(@"C:\e\z.zip", @"C:\e\zz");
            Console.ReadKey();
        }
    }
}

Skrevet man. d. 30. august 2010 kl. 17:47:49| #22

DSDM
DSDM (3.390 point)
www.d-zig.com
altså. Nu giver det lidt mening :b Men stadig ingen løsning.

Den version du havde virkede "arne". Så har kigget den igennem, Du bruger zipFile og jeg bruger ZipInputStream. Problemet i min ligger i at når jeg vil udpakke en zip fil med fx.

__INDHOLD__
mappe(img):
Default.aspx:
style.css:
___________

Så 1. opretter den mappen til zip filens indhold
2. opretter den første mappe i zip filen
3. kommer indholdet af den undermappe ind i den (MEN HER ER FEJLEN)

Den kan ikke finde den mappe den lige har oprettet?

Kan simpelthen ikke lige se hvad der går galt? :s

Skrevet man. d. 30. august 2010 kl. 19:44:45| #23

arne_v
arne_v (1.005.623 point)
Kan der vaere skrive adgangs problemer der hvor du udpakker?

Skrevet man. d. 30. august 2010 kl. 22:30:18| #24

buzzzz
buzzzz (46.576 point)
ifyoudo.net
Men dvs. du er 100% sikker på at alle mapper som bruges også er blevet oprettet med korrekt navn etc. ?

Skrevet man. d. 30. august 2010 kl. 23:52:59| #25

DSDM
DSDM (3.390 point)
www.d-zig.com
som sagt så virker den løsning du kom med "arne_v", så nej den skriver fint.

ja alle mapper/mappen er oprettet korrekt.


Men det virker nu, har lavet en kombination af arne_v's version og min. Kan dog ikke helt se hvad forskellen er dog? Men det virker! :)

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Koordinater for nyt vindue efter scroll, csharp.

Oprettet den 11. februar 2012 kl. 01.54
bjarnefilm giver 30 point for svar | Giv et svar »

Treeview hovedmenu á lá Dynamics C5

Oprettet den 10. februar 2012 kl. 08.12
olehaahr giver 30 point for svar | Giv et svar »

Deployment på Windows Mobile 6.5

Oprettet den 9. februar 2012 kl. 13.59
schristensen giver 200 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger