Problem beim laden von Bildern -> File not Found

Alles rund um die Programmierung mit Qt
Antworten
ossi
Beiträge: 9
Registriert: 4. Mai 2010 09:03

Problem beim laden von Bildern -> File not Found

Beitrag von ossi »

Hi Leute,

gibt es bei Qt irgendwelche Bedingungen was den Namen von Bildern angeht?

Ich hab mehrfach das Problem gehabt, das ein Bild nicht gefunden wurde, obwohl es vorhanden ist, der Richtige Pfad genutzt wurde und ich das Bild auch so öffnen konnte. Habe ich das Bild dann aber kopiert und ihm einen anderen Namen gegeben, wurde es gefunden.

Ich verwende folgenden Code beim einlesen der Bilder:

Code: Alles auswählen

       for (int i = 0; i < 4; i += 1)
        {
              //Bilderpfad zusammenbasteln
                if (Image_Name[i])
                {
                        if (BILDERPFAD)
                                sprintf (Load_Name, "%s/%s", BILDERPFAD, Image_Name[i]);
                        else    sprintf (Load_Name, "./Bilder/%s", Image_Name[i]);

                        Ergebnis = stat (Load_Name, &FileBuffer);
              //Bild laden bzw. Fehlermeldung ausgeben
                        if (Ergebnis == 0)
                        {
                                printf ("Load Icon [%s]\n", Load_Name);
                                Icon[i].addFile(Load_Name, QSize(), QIcon::Normal, QIcon::Off);
                        }
                        else
                        {
                                printf ("Cannot Load Icon [%s], Ergebnis = %d\n", Load_Name, Ergebnis);
                                perror ("Fehler");
                                Image_Name[i] = NULL;
                        }
                }
        }
Ist einfach nur IRGENDWAS an der Bilddatei defekt, oder liegt es an Qt?

Dazu ist noch zu sagen das mein Programm in 99% der Fällen funktioniert!
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Was macht denn stat()?
Ist Load_Name vom Typ char* und auch lang genug?
Trenne dich von char*, printf etc. Du arbeitest mit Qt. Nutze QString, QBytearr, qDebug() und alle das.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Der Code sagt einem gar nix. Ist das ein relativer oder absoluter Pfad? Was macht stat? Hast du die Doku zu QIcon::addFile gelesen?
Bei letzterem bin ich mir sicher: nein :P
Adds an image from the file with the given fileName to the icon, as a specialization for size, mode and state.
HINT: QIcon hat auch einen operator=.

Ich tippe aber darauf, dass dein Zugriffspfad relativ zum executable angegeben wird, das Ausführungsverzeichnis mit diesem aber nicht identisch ist :P

Und warum eigentlich diese ganzen sprintf?!? Verwende für die Pfade gleich QString mit operator+/operator+= oder wenn dir "normale" Funktionen lieber sind, QString::append().
ossi
Beiträge: 9
Registriert: 4. Mai 2010 09:03

Beitrag von ossi »

Nein, ich verwende kein Qt, ich verwende Klassen von Qt... das Hauptprogramm ist C++. Und ob jetzt QString oder sprintf tut ja nix zur Sache, der Pfad wird jedenfalls korrekt zusammengesetzt.

Der Pfad ist absolut zum Executable. Der Loadname ist lang genug, da er mit längeren Namen auch keine Probleme hat. (wird mit 128 Zeichen initialisiert)

Der Witz an der ganzen Sache ist ja, da werden 30 oder 50 Icons auf genau die Weise geladen... und eines findet er nicht.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

ossi hat geschrieben:Nein, ich verwende kein Qt, ich verwende Klassen von Qt... das Hauptprogramm ist C++.
Dann verwende std::string. Solch händisches char*-Stückwerk ist immer fehleranfällig, std::string verhindert, dass du solche Fehler machst. Z.B. zu kurze Zielstrings, fehlendes "\0" als String-Terminierer, usw.

Aber dein Argument versteh ich nicht: Du verwendest an der Stelle QIcons in einem Vector/Array (QVector, std::vector, rohes Array, boost::array?). Du bindest dich also schon komplett an Qt, dann verwende doch bitte an der Stelle auch QString!
Der Pfad ist absolut zum Executable. Der Loadname ist lang genug, da er mit längeren Namen auch keine Probleme hat. (wird mit 128 Zeichen initialisiert)
Absolut zum executable :D
Absolut == "/home/my_user/apps/BildLader/Bilder/"
Relativ == "../Bilder"
Der Witz an der ganzen Sache ist ja, da werden 30 oder 50 Icons auf genau die Weise geladen... und eines findet er nicht.
Das war aus deinem ersten Post nicht so klar heraus zu lesen.
Dann liegt es an was anderem, k.A.
Hast du dir den kompletten Pfad ausgeben lassen und auf Korrektheit überprüft? Sind Sonderzeichen im Namen enthalten?
ossi
Beiträge: 9
Registriert: 4. Mai 2010 09:03

Beitrag von ossi »

Man... meint ich ja... du hast mich verstanden! :lol:


Pfad wird komplett ausgegeben im Fehlerfall und ist Korrekt. Sichtbare Sonderzeichen sind nicht vorhanden (gibt's eigentlich unsichtbare Sonderzeichen? :wink: ). Selbst die Dateirechte sind mit den anderen 50 Übereinstimmend... ist schon ziehmlich seltsam, da alle Bilder auf die gleiche Weise in Gimp entstanden sind. Wäre die Datei defekt, könnte man das ja verstehen, aber so ist es schon seltsam.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Dann hilft nur noch eins:
Projekt samt Bildern in ein .zip und als Anhang hier im Forum an deinen Post hängen (Forum-Funktion "Attachement", bitte kein rapidshare &co...).
Nimm alle Binaries (libs/.exe) raus, hier haben eigentlich alle Qt installiert und können kompilieren. Und ich hab ne langsame Internetleitung :P
Am besten gleich als Minimalbeispiel, also an Code alles weg was irrelevant ist, so dass dein Problem extrahiert wird.
ossi
Beiträge: 9
Registriert: 4. Mai 2010 09:03

Beitrag von ossi »

Des kann ich leider nicht machen, unterliegt einem Copyright... Studienarbeit und so. :D

Dennoch danke für die Antworten. Jetzt bin ich halbwegs sicher das es net am Programm liegt! :wink:
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Solltest du den eigentlichen Fehler noch finden, sag bescheid :)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Sind da evtl. nicht.-ASCII - Zeichen im Dateinamen? Wenn ja - siehe QString-Doku!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten