1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Verstehen der microsoft documentation

Discussion in 'Programmieren' started by D.Brown, Aug 15, 2017.

Thread Status:
Not open for further replies.
  1. D.Brown

    D.Brown Kbyte

  2. kalweit

    kalweit Hüter der Glaskugel

    Das ist nur eine "Referenz". Sie dient dazu, die Struktur von Objekten/Klassen und deren Funktionen aufzulisten. So eine Referenz nutzt nur dann etwas, wenn man die passende Programmiersprache bereits beherrscht. Zum Erlernen taugt so was nicht. Entsprechend unkommentiert sind auch die Beispiele. Was willst du denn eigentlich programmieren? Eventuell kann man die gewünschte Aufgabe anders umsetzen.
     
  3. D.Brown

    D.Brown Kbyte

    Danke für deine Antwort.
    Es geht mir mehr darum ob ein Erfahrener Programmieren theoretisch einfach in die windows documentation nach der Klasse sucht und mit die Dokumentation der aufgelistete Methoden ausreicht um etwas umzusetzen. Oder dient das eher als ein Nachschlagewerk?

    Aber zu mein Problem:
    Mir geht es darum Daten zu komprimieren und entkomprimieren (.zip) ohne in einen Lokalen Laufwerk zu speichern.
    Ich programmieren mit Visual Studio 2015 in C#.

    Wie ich etwas mit der Zipfile klasse entpacke steht hier
    https://msdn.microsoft.com/en-us/library/system.io.compression.zipfile(v=vs.110).aspx

    Code:
     string startPath = @"c:\example\start";
                string zipPath = @"c:\example\result.zip";
                string extractPath = @"c:\example\extract";
    
                ZipFile.CreateFromDirectory(startPath, zipPath);
    
                ZipFile.ExtractToDirectory(zipPath, extractPath);
    Es funktiniert und die daten werden gepackt, aber erhalte eine Exception nach dem Ausführen.
    An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll
    Additional information: Der Prozess kann nicht auf die Datei "c:\example\result.zip" zugreifen, da sie von einem anderen Prozess verwendet wird.



    So funktiniert das über den Filestream aber hier benötige ich einen Zwischenspeicher.
    Code:
    
       
          static string filename = @"c:\example\test.txt";
          static string outputName = @"c:\example\test.gz";
    
           public void Compress()
        
          {
    
                using (FileStream inputStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite))
    
                {
    
                    using (FileStream output = new FileStream(outputName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                    {
    
                        using (GZipStream gzip = new GZipStream(output, CompressionMode.Compress))
                        {
                            inputStream.CopyTo(gzip);
                        }
                    }
    
                }
            }
    
            public void Decompress()
            {
    
                using (FileStream inputStream = new FileStream(outputName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
    
                {
               
    
                    using (FileStream outputStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                    {
    
                        using (GZipStream gzip = new GZipStream(inputStream, CompressionMode.Decompress))
                        {
                            gzip.CopyTo(outputStream);
                        }
                    }
    
                }
            }
    Da mir nicht ganz klar ist was ein Filestream ist sollte ich mich erstmal in Filestream einlesen. Wäre das hier zu empfehlen?:
    http://openbook.rheinwerk-verlag.de/visual_csharp_2010/visual_csharp_2010_12_003.htm
     
  4. kalweit

    kalweit Hüter der Glaskugel

    Genau so ist das gedacht.

    C# ist leider nicht meine Baustelle. Grundsätzlich zu deinem Problem: die Daten müssen zwangsweise irgendwo gespeichert werden. Nimm doch einfach eine Systemvariable, dann hast du automatisch immer einen gültigen Speicherort zum Zwischenspeichern. Ein klassischer Kandidat wäre der Temp-Ordner -> https://msdn.microsoft.com/de-de/library/system.io.path.gettemppath(v=vs.110).aspx
     
  5. D.Brown

    D.Brown Kbyte

    So kann ich Daten auf dem Memorystream übergeben. Schaue nacher ob das mit dem Komprimieren mit den oberen Code abschnitt zusammen funktioniert

    http://openbook.rheinwerk-verlag.de/visual_csharp_2010/visual_csharp_2010_12_003.htm

    Code:
    MemoryStream memoryStream = new MemoryStream();
    
    
                byte[] data = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
                string path = @"C:\Test\Testfile.txt";
                // FileStream öffnen
                FileStream fs = new FileStream(path, FileMode.Create);
    
                // 1. Paramter
                // 2. Paramater ab Wieviel vom Array !
                // 3.Parameter wieviele zeichen vom array sollen übertragen werden!
                fs.Write(data, 0, 10);   
                fs.Position = 0;        // die Position muss auf Null gesetzt werden bevor kopiert wird
               
                fs.CopyTo(memoryStream);
                fs.Close();
    
    
                byte[] data2 = new byte[10];
    
                memoryStream.Position = 0;  // geht der Stream nach kopieren automatisch auf die letzte Position?
                // alternativ zu Position kann auf die Seek Methode verwendet werden!
                //memoryStream.Seek(0, SeekOrigin.Begin);  
           
                memoryStream.Read(data2, 0, 10);
             
               
               
    
                for (int i = 0; i< 10; i++)
                {
                    Console.WriteLine(data2[i]);
                }
    
                memoryStream.Close();
    Mir ist leider nicht ganz klar warum ich die Position des Streams vor dem Kopieren und vor dem Schreiben auf die Position "0" setzen muss.
    Code:
    fs.Position = 0;
    
    memoryStream.Position = 0;
    geht der Stream nach kopieren automatisch auf die letzte Position?
     
Thread Status:
Not open for further replies.

Share This Page