Laden...

Verzeichniss mit Unterordnern Zippen und UnZippen

Letzter Beitrag vor 15 Jahren 10 Posts 4.898 Views
Verzeichniss mit Unterordnern Zippen und UnZippen

Hallo zusammen,

bin neu hier und auch neu in visual C#.
Ich möchte gerne ein Verzeichniss Zippen, und UnZippen können.
Habe mir einige Beispiele aus dem Netz runterkopiert, die mit der Bibliothek
CSharpZipLib arbeiten.

Der Verzeichniss hat Unterordner. (natürlich befinden sich Dateien in de verschiedenen Ordner).

Was ich momentan machen kann ist, alle Dateien die sich im Verzeichniss befinden Zippen, aber ohne die Unterordner, so dass alle Dateien nach dem Zippen in einem Gezipten ordner befinden.

Aber wass ich eigentlich will ist das gesammte Verzeichniss Zippen und dann Unzippen können !

Hat einer von euch ein Beispielprogramm???

Vielen Dank

LeChimp

das gesammte Verzeichniss Zippen und dann Unzippen

Das Unzippen müsste sowieso gehen. Die Lib unzippt imho flach, da musste ich mal einen Workaround zum Verschachteln bauen.

Wie du ein gesamtes Verzeichnis zippen kannst erfährst du beim Snippet Verzeichnisse und Dateien rekursiv durchlaufen.

mfg
SeeQuark

WOW !! ging dass schnell ! Super werde es mir jetzt angucken !!!

Hallo zusammen,

Was das Unzippen angeht bin heute morgen auf ein Code gestossen und funktioniert wunderbar !

FastZip fz = new FastZip();        
fz.ExtractZip(@"D:\SourceZipFile.zip", @"D:\TargetUnZipDirectory","");

ABER... es gibt immer ein Aber, es funktioniert solange keine andere Zip Dateien sich in Zip Ordner befinden.

Nun, mein problem ist steht bein Zippen
Ich kann schon alle Dateien zippen aber nicht in den zustaendinge Ordner bzw. Unterordner. (Siehe Code)
Hat jmd eine Idee! oder Tipps?

 public static void WriteZipFile(List<string> filesToZip, string path, int compression)
        {
            Cursor.Current = Cursors.WaitCursor;
            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++)
            {
                ////Zip Entry for Zip Files!
                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();
            
        }

SeeQuark : ?( ?( Die Lib unzippt imho flach ?( ?(

Also dein Problem ist NICHT das die Dateien aus den Unterordnern nicht dabei sind, sondern dass die Ordner Struktur genauso erhalten bleiben soll, wie sie ist richtig?

„Heute back ich, morgen brau ich,
übermorgen cast ich die Königin nach int;
ach, wie gut dass niemand weiß,
dass ich Rumpelstilzchen heiß!“

"Bei Stylefragen sollteste nen Mac-User oder ne Frau fragen."

Genau !! 👍
Ich haette es nicht besser sagen koennen !

schau dir nochmal die fastzip klasse an, die du zum unzippen verwendet hast. die kann genau das, was du suchst in einer zeile code machen.

Narfffff =)!!!!!

Danke JAck30Lena !!!!! genau dass wollte ich erreichen !!

string filezip2 = @"D:\TestZip2.zip";
string folder2 = @"D:\ToZipFolderTest";
FastZip fz2 = new FastZip();
fz2.CreateZip(filezip2, folder2, true, "");

Danke nochmals, und bis naechstes mal !!

PS: mit den smilies stimmt was nicht !

hallo zusammen,

habe jetzt ein Bug entdeckt,

falls sich ein leeren Ordner im Verzeichnis befindet, wird der nicht kopiert!.
Anscheint erkennt mein Code keine Leeren Ordner, oder bzw. werden die vernachlaessigt.

Hat jmd eine Idee wieso? oder wie ich das loesen kann?

Danke

Servus,

Programmieren heißt machen und nicht fragen! Das können die 0815 Arbeiter ala Osten (nicht böse sein) auch.

Ausschnitt der CreateZip-Mehtode:
Quelle: http://www.koders.com/csharp/fidC8CCF777E0B2D558CB29F6F82046AFB6DCBB7B56.aspx

public void CreateZip(string zipFileName, string sourceDirectory, bool recurse, string fileFilter, string directoryFilter)
		{
			NameTransform = new ZipNameTransform(true, sourceDirectory);
			this.sourceDirectory = sourceDirectory;
			
			outputStream = new ZipOutputStream(File.Create(zipFileName));
			try {
				FileSystemScanner scanner = new FileSystemScanner(fileFilter, directoryFilter);
				scanner.ProcessFile += new ProcessFileDelegate(ProcessFile);
				if ( this.CreateEmptyDirectories ) {
					scanner.ProcessDirectory += new ProcessDirectoryDelegate(ProcessDirectory);
				}
				scanner.Scan(sourceDirectory, recurse);
			}
			finally {
				outputStream.Close();
			}
		}

Der Abschnitt

if ( this.CreateEmptyDirectories ) {

dürfte dich interessieren.

Gruß
Thomas