Bildabmessungen prüfen



  • Als Nachtrag: C#

    Denke es wäre aber trotzdem von Vorteil, wenn das Bild bereits in der richtigen Größe vorliegen würde.



  • C# geht auch im Zusammenhang mit ASP.

    Ist es nun eine WindowsForms (WPF) Anwendung oder eine ASP.Net (Silverlight) Geschichte ?

    Ansonsten: Schau doch auch mal in die MSDN z.b. unter SaveFileDialog. Eigeninitiative ist gefragt.



  • Knuddlbaer schrieb:

    Hm... Wo ist der Hinweis das es sich um ASP handelt ?

    OpenFileDialog, Hochladen



  • OK, SaveFileDialog ist wiederum ein Clientprogramm denn das gibt es bei ASPNET nicht.



  • Du kannst mit dem Bild machen was Du möchtest. Größe, etc.
    Sag mal ob es WINFORMS, SILVERLIGHT, ASPNET, oder sonstwas ist.

    Wenn es ASPNET ist kannst du das Bild auch 1000 Mal am Server hinundher kopieren.
    Am Client kannst Du dir nicht sicher sein ob es D:\Produktbilder gibt.
    Auch dort kannst das Bild kopieren wie du möchtest ohne das der User etwas merkt.
    Kannst ihm da auch die Platte löschen wenn du möchtest.



  • OpenFileDialog und Hochladen gibts auch in Desktopanwendungen. Man denkt einfach nur in den Gebieten die man selbst alltäglich verwendet ;o)



  • Tut mir leid für die wenigen Angaben von mir: C# -> WINFORM

    Zum Speichern habe ich folgendes mal versucht, jedoch wird gar nichts gespeichert.
    Das liegt wohl daran, dass ich keine Datei dahinter habe, oder?
    Wie/wo muss ich meine Ursprungsdatei (also von C:\Bilder) zuweisen? Reicht da der Pfad?

    saveFileDialog1.DefaultExt = "jpg";
                saveFileDialog1.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*";
                saveFileDialog1.AddExtension = true;
                saveFileDialog1.RestoreDirectory = true;
    
                saveFileDialog1.Title = "Speicherort?";
    
                saveFileDialog1.InitialDirectory = @"D:\Produktbilder";
                saveFileDialog1.FileName = speicherArtNr;
    
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    MessageBox.Show("Speicherort: " + saveFileDialog1.FileName);
                }
                else
                {
                    MessageBox.Show("You hit cancel or closed the dialog.");
                }
                saveFileDialog1.Dispose();
                saveFileDialog1 = null;
    


  • http://msdn.microsoft.com/de-de/library/system.windows.forms.savefiledialog.aspx

    Fordert den Benutzer zur Auswahl eines Speicherorts für eine Datei auf. Diese Klasse kann nicht geerbt werden.



  • Hat geklappt, eigentlich ganz einfach ...

    File.Copy(sourcepath, destinationpath);
    

    Dankeschön!



  • Problem noch nicht ganz gelöst.

    Wenn ich die Datei überschreiben möchte, dann wollte ich die vorhandene Datei löschen und die neue wieder kopieren. Allerdings wird meine Datei nicht gelöscht ...

    File.Delete(destinationpath);
    File.Copy(sourcepath, destinationpath);
    

    Kann mir jemand sagen warum??
    Meine Pfadangabe stimmt, sonst würde es mit dem kopieren ja nicht funktionieren ...





  • @Knuddelbaer
    Tut mir leid, wenn ich mich so blöd anstelle ... 😞

    Hab das Kopieren/Löschen wie hier gezeigt versucht umzusetzten:
    http://msdn.microsoft.com/en-us/library/system.io.file.copy(VS.71).aspx

    Wie gesagt, Kopieren klappt wunderbar!
    Nur das Löschen nicht. Und ich würde mich wirklich über einen Tipp freuen ...



  • Geht nicht ist keine Fehlerbeschreibung. In Deinem Code löschst Du eine Datei und kopierst darauf wieder eine an den gleichen Punkt an dem Du zuvor gelöscht hast.

    Wenn Du jetzt erwartest das es keine Datei mehr gibt weiß ich nicht wie ich helfen soll.

    Welches Ergebnis wird erwartet, wie schaut das Ergebnis aus ? Gibt es eine Exception ? Fehlermeldungen ?



  • Ok, danke. Hab nun hoffentlich verstanden was Du meinst! Gelobe Besserung!

    Das Problem ist, dass die Datei gar nicht gelöscht wird, sie ist nie weg, dass eine neue rein kopiert werden könnte.
    Wenn die Anweisung

    File.Delete(destinationpath);
    

    ausgeführt wird, lande ich immer in meiner catch-Schleife.

    Selbst wenn ich "hart-codiert" einen Dateipad angebe (der sicher so existiert) z.B.

    File.Delete(@"D:\Produktbilder\HA-01.jpg");
    

    geht es nicht.

    Ich hoffe, mein Problem ist nun verständlicher?!
    Anbei mal die ganze Funktion ...

    //Kopieren des Bildes in das neue Verzeichnis und Speichern der Daten in der DB
            public void BildKopieren(string speicherArtNr, string sourcepath)
            {
                try
                {
                    if (vorhanden == true)
                    {
                        string destinationpath;
                        destinationpath = strPfad + speicherArtNr + ".jpg";
    
                        File.Delete(destinationpath);
    
                        //Kopieren der Datei in das neue Verzeichnis
                        File.Copy(sourcepath, destinationpath);
    
                        MessageBox.Show("Speicherort: " + destinationpath);
                        lblPfad.Text = destinationpath;
                    }
                    else
                    {
                        string destinationpath;
                        destinationpath = strPfad + speicherArtNr + ".jpg";
                        File.Copy(sourcepath, destinationpath);
    
                        MessageBox.Show("Speicherort: " + destinationpath);
                        lblPfad.Text = destinationpath;
                    }
                }
                catch
                {
                    MessageBox.Show("Das Bild wurde nicht im neuen Verzeichnis gespeichert", "Fehler", MessageBoxButtons.OK);
                }
            }
    


  • Du hast erst angefangen , hm ?

    catch (Exception ex)
                {
                    MessageBox.Show(ex.Message,"Der Grund");
                    MessageBox.Show("Das Bild wurde nicht im neuen Verzeichnis gespeichert", "Fehler", MessageBoxButtons.OK);
                }
    

    In der Exception steht warum es nicht klappt.



  • Ja, bin Neuling ... 🙄
    Danke, das war sehr hilfreich!

    Kann mir nun auch denken, an wo das Problem liegt.

    Die Exception sagt, dass

    Der Prozess kann nicht auf die Datei ... zugreifen, da sie von einem anderen Prozess verwendet wird.

    Ich lasse immer ein Bild zu einem Artikel anzeigen, d.h. ich möchte eine Datei löschen, die ich verwende. Sollte also erst meine PictureBox leeren, bevor ich lösche ...



  • Vllt hilft Dir das hier:

    using(Bitmap mybitmap = Bitmap.FromFile("mypic.png"))
         PictureBox1.Picture = new Bitmap(mybitmap);
    

    Das sorgt dafür das die Bitmap instanz, die da eventuell auf das File zugreift bzw. dieses hält asap freigegeben wird. Die Picturebox wird einfach mit einer Kopie versorgt. (Kostet Zeit und Speicher).



  • Hab die Lösung gefunden:
    http://support.microsoft.com/kb/311754/de



  • Mit dem Wissen ist mein Vorschlag natürlich Blödsinn 🤡 Thx für den Link.


Anmelden zum Antworten