Entwickler-Ecke
IO, XML und Registry - File zippen mit C#
christherdnn - Mi 11.03.09 17:06
Titel: File zippen mit C#
Hallo aller Seite,
ich heiße Hermann und ganz neu im C#,
ich möchte gern ein Program schreiben, das mir ein .txt file zu zippen.
hier ist mein code, er ist nicht schön, deswegen wende ich an Sie.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using ICSharpCode.SharpZipLib.Zip;
namespace GetZip { class Program { static void Main(string[] args) { string filename = File.OpenRead(@"\"); ZipOutputStream s = new ZipOutputStream(File.Create(@"\")); s.SetLevel(1); foreach(string file in filename) { FileStream fs = File.OpenRead(file); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); ZipEntry entry = new ZipEntry(file); entry.DateTime = DateTime.Now; entry.Size = fs.Length; fs.Close(); }
s.Finish(); s.Close(); } |
Danke für Ihre Hile
Hermann
Moderiert von
Christian S.: C#-Tags hinzugefügtModeriert von
Christian S.: Topic aus C# - Die Sprache verschoben am Mi 11.03.2009 um 18:39
JüTho - Mi 11.03.09 17:29
Hallo Hermann und :welcome:
zwei Sachen vorab: In Foren ist das "Du" üblich (auch ich habe mich mit 60+ daran gewöhnt, dass ich mich mit Programmierern unter 20 gegenseitig duze).
Code ist als solcher zu markieren: Text markieren, "Bereiche" öffnen, C# wählen, Plus-Button. Das kannst Du auch nachträglich erledigen, indem Du den Text mit dem Schere-Button änderst.
Zur Sache kann ich erst dann etwas sagen, wenn ich den Code als solchen erkennen kann. Es kommt mir aber so vor, als ob Du innerhalb der foreach-Schleife viele Variablen erzeugst, ohne sie wirklich zu benutzen. SharpZipLib hat doch eine Hilfe, oder? Andernfalls gibt es ein
SharpZipLib-Forum [
http://community.sharpdevelop.net/forums/12.aspx].
Geht es Dir nur darum zu erfahren, ob und wie der Code zu verbessern wäre, oder gibt es wirklich Probleme? Wenn ja, welche?
Jürgen
christherdnn - Mi 11.03.09 17:45
Hallo Jürgen,
danke für deine Emphelungen, ja eigentlich möchte ich wissen wie ich die Code verbessern kann, eignetlich wollte ich eine Methode schreiben, die als parameter (string file,string filepath) bekommt und und mir eine .zip datei erzeugt.
mein ziel ist es später diese code als WPF zu erweitern
Wäre nett wenn du mir helfen würdest diese code zu verbessern, wie gesagt bin ich kein Profi.
Danke noch mals
Hermann
JüTho - Mi 11.03.09 17:52
JüTho hat folgendes geschrieben : |
Code ist als solcher zu markieren: Text markieren, "Bereiche" öffnen, C# wählen, Plus-Button. Das kannst Du auch nachträglich erledigen, indem Du den Text mit dem Schere-Button änderst...
Jürgen |
OK, das hat Dir Christian abgenommen.
Leider kann ich anhand der verwendeten Klassen und Methoden nicht erkennen, wie Du vorgehst, und ich kenne SharpZipLib nicht aus eigener Arbeit. Deshalb kann ich nicht weiterhelfen (wenn Du Kommentare und Beschreibungen gebracht hättest, wäre das vielleicht noch anders, aber so: tut mir leid). Jürgen
Coster - Mo 16.03.09 17:07
Hi,
hier ein Entwurf wie man das Problem angehen könnte. Sicherlich nicht perfekt, aber es klärt deine Fragen.
Programm wird per Parameter angesteuert und erwartet als erstes den Pfad für das ZipArchiv und interpretiert alle weiteren für die Inhalte des selbigen.
Man kann jetzt noch div. TryCatch Erweiterungen ergänzen, prüfen ob Schreibzugriffe möglich sind etc.etc.etc.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| using System; using System.Collections.Generic; using System.IO; using System.Text; using ICSharpCode.SharpZipLib.Zip;
namespace ZipIt { class Program { private static FileInfo _fi; private static FileStream _fs; private static FileStream _outfs; private static ZipOutputStream zipStream;
private const int blockSize = 1024; private static byte[] buffer; private static int bytesRead; private static string _zipName;
static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("Bitte geben Sie die notwendigen Parameter mit."); Console.ReadKey(); } else { foreach (string param in args) { if (_zipName == null) { _zipName = param; _outfs = new FileStream(_zipName, FileMode.OpenOrCreate);
zipStream = new ZipOutputStream(_outfs); zipStream.SetLevel(9); } else { _fi = new FileInfo(param);
if (!_fi.Exists) Console.WriteLine(String.Format("{0} - {1} {2}", DateTime.Now, param, "existiert nicht, konnte Datei nicht lesen.")); else { _fs = new FileStream(_fi.FullName, FileMode.Open); zipStream.PutNextEntry(new ZipEntry(_fi.Name));
buffer = new byte[blockSize];
while ((bytesRead = _fs.Read(buffer, 0, buffer.Length)) > 0) { zipStream.Write(buffer, 0, bytesRead); }
_fs.Close(); } } }
if (zipStream != null) { zipStream.Finish(); zipStream.Close(); } } } } } |
Grüße
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!