Autor Beitrag
christherdnn
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 11.03.09 17:06 
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.
ausblenden 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 user profile iconChristian S.: C#-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Mi 11.03.2009 um 18:39
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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.

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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 11.03.09 17:52 
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
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
Hält's aus hier
Beiträge: 1



BeitragVerfasst: 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.

ausblenden volle Höhe 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)
            {
                // Meldung ggf. um Parameterbeschreibung erweitern.
                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);

                        // Überprüfe ob die Datei existiert.
                        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