myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Programm zum Verkleinern von Bildern stürzt immer wieder ab
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Programm zum Verkleinern von Bildern stürzt immer wieder ab

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Thismalor
myCSharp.de-Mitglied

Dabei seit: 05.12.2018
Beiträge: 1


Thismalor ist offline MSN-Passport-Profil von Thismalor anzeigen

Programm zum Verkleinern von Bildern stürzt immer wieder ab

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Morgen Freunde

Ersteinmal Vorweg:
Ich bin blutiger Anfänger. Also Quasi 0,0 Ahnung von Programmieren. Aber nicht vergessen. Jeder hat einmal klein angefangen..

Ich hab mit meinem Ersten Projekt ein kleinen Programm geschrieben welches Bilder verkleinert.
Funktioniert soweit auch. Leider stürzt es aber immer wieder ab.

Ich glaube auch das es wirklich schlampig Programmiert ist. Aber wie gesagt ich bin noch blutiger anfänger. Kann mir jemand sagen wie ich das Abstürzen verhindern kann. Ich glaube das Programm stürzt ab sobald schon in den Ordner "Original" schon zugegriffen wird.

C#-Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;

namespace JKThumbnail
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> Bilder = new List<string>();
            List<string> Thumb = new List<string>();
            var PfadBilder = "C:\\wifi\\original";
            var PfadThumb = "C:\\wifi\\Thumbs";

            while (!false && true)
            {

                System.IO.DirectoryInfo ParentDirectory = new System.IO.DirectoryInfo(@PfadBilder);

                foreach (System.IO.FileInfo f in ParentDirectory.GetFiles())
                {
                    Bilder.Add(f.Name);
                    // Console.WriteLine(f.Name);
                }

                var Thump = new List<string>();
                System.IO.DirectoryInfo ThumbDirectory = new System.IO.DirectoryInfo(@PfadThumb);

                foreach (System.IO.FileInfo T in ThumbDirectory.GetFiles())
                {
                    Thumb.Add(T.Name);
                }

                IEnumerable<string> differenceQuery =
                Bilder.Except(Thumb);

                foreach (string s in differenceQuery)
                {
                    string input = PfadBilder + "\\" + s;
                    string output = PfadThumb + "\\" + s;


                    System.Threading.Thread.Sleep(1000);

                    Bitmap thumbnail = new Bitmap(input);

                    Bitmap objBitmap = new Bitmap(thumbnail, new Size(450, 300));

                    // Save thumbnail.
                    objBitmap.Save(output);
                    objBitmap.Dispose();
                    thumbnail.Dispose();
                }
                Bilder.Clear();
                Thumb.Clear();
                System.Threading.Thread.Sleep(5000);


            }
        }


        }

}

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Thismalor am 05.12.2018 17:36.

05.12.2018 17:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 978
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

auch wenn es für Anfänger manchmal etwas harsch hier wird - hier werden gewisse Grundkenntnisse bzw. zumindest Fleiß erwartet - trotzdem wollen wir helfen ;-)

Erster Hinweis:
Den Code kann hier so fast keiner lesen - dafür gibt's beim Verfassen des Beitrags extra C#-Tags, damit es wenigst leserlich formatiert wird. Ohne - kannst du Hilfe meist nicht erwarten.

Zweiter Hinweis:
Wenn es zu Laufzeitfehlern wie dem deinen kommt und du eine geeignete Entwicklungsumgebung nutzt (z.B. Visual Studio Express) - stürzt nicht nur dein Programm ab - es wird eine sogenannte Exception geworfen, welche eine genaue Fehlermeldung samt Stacktrace (ausgeführte Methoden), und meist die auslösende Zeile im Code nennen. Den Inhalt der Exception muss man im Forum in den Error-Tags posten. (Deine Umgebung nachstellen und dein Projekt nachstellen ist mitunter aufwändig falls überhaupt möglich - und ohne kann man meist gar nicht helfen)

Dritter Hinweis:
Thread.Sleep ist ähnlich wie Application.DoEvents eine ziemlich ungeschickte Sache. Je nach Ziel gibt es dafür in den allermeisten Fällen eine deutlich bessere Lösung.

Vierter Hinweis:
An Stelle von Dispose solltest du hier "using" (siehe  https://docs.microsoft.com/de-de/dotnet/...using-statement) verwenden. Das erspart dir weitere Probleme beim unsauberen Handling.

Zu deinem eigentlichen Problem:
Die Art, in der du das Bild öffnest - ermöglicht Schreibzugriff und versucht demnach die Datei zu sperren - ist diese schon geöffnet - "knallt" es (-> Exception).

Möglichkeiten wieso es bei deinem Code knallt gibt es allerdings sehr viele - deshalb musst du die Exception posten....

LG

Nachtrag als Hilfe (hab den Artikel erst jetzt wieder gefunden) - damit kann man sich meist selbst helfen:
 [Artikel] Debugger: Wie verwende ich den von Visual Studio?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Taipi88 am 05.12.2018 18:11.

05.12.2018 17:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
emuuu
myCSharp.de-Mitglied

avatar-4078.jpg


Dabei seit: 04.02.2011
Beiträge: 228
Entwicklungsumgebung: VS 2017


emuuu ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zu dem was Taipi schon richtig gesagt hat muss ich ergänzen:

Zitat von Thismalor:
Ich hab mit meinem Ersten Projekt ein kleinen Programm geschrieben

Sorry but: doubt it. Der gepostete Code sieht leider sehr nach zusammengecopypasted aus. So lernst du aber relativ wenig über C# und wie du damit umzugehen hast, da sich idR nicht erschließt wofür z.B. Dispose() eigentlich aufgerufen wird.

Ich würde dir daher das hier empfehlen:  [FAQ] Wie finde ich den Einstieg in C#?


Beste Grüße
emuuu

Und leicht OT:

C#-Code:
while (!false && true)
{}

What the hell?
Mit ! negierst du einen boolschen Wert also !false = true. bzw. !true = false. Sprich deine Klammer heißt einfach nur (true && true). Zumal while(true) für eine endlos-Schleife okay sein kann, in der Regel aber nicht die bestmögliche Lösung ist, meist sogar eine ziemlich miese, da die Wahrscheinlichkeit, dass dein Programm einfach einfriert (da Endlos-Schleife in der UI) recht hoch ist.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von emuuu am 05.12.2018 18:22.

05.12.2018 18:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
M.L.
myCSharp.de-Mitglied

Dabei seit: 26.09.2006
Beiträge: 195
Entwicklungsumgebung: VS Community '19


M.L. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Kurzer Nachbau des geposteten Quellcodes mit VS 2017 Community (und anderen Ordnernamen mit Testbildern in "original"): das Programm kompiliert einwandfrei, zeigt ein Konsolenfenster, komprimiert die Bilder einwandfrei in den Ordner "thumbs", wirft aber gerade keine Exception...

Was die programmiererische Umsetzung angeht, könnte man  DotNetPerls - Recursive File List und  DotNetPerls - Image zumindest mal ansehen (nicht zum blinden Kopieren gedacht)

Nachtrag: die Zeile mit "while (!false && true)" könnte/sollte man mit "try" ersetzen
(am Ende dann

Code:
1:
2:
catch(Exception ex)
            { Console.WriteLine(ex);  }

nicht vergessen). Das Konsolenfenster schliesst sich dann regulär.
06.12.2018 20:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 11 Monate.
Der letzte Beitrag ist älter als 11 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 13.11.2019 02:34