Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.11.2014, 18:34

Unable to load File

Hallo,
ich habe mir SFML für VS runtergeladen und eingerichtet.
Zuerst funktionierte alles super, doch als ich versucht habe
eine JPEG Datei einzubinden kam dort immer folgende
Fehlermeldung:

Quellcode

1
Failed to load image "Test.jpg". Reason : Unable to open file


Hier noch mein Code:

C-/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
#include <iostream>
#include <SFML/Graphics.hpp>

using namespace std;

int main ()
{
  sf::RenderWindow fenster(sf::VideoMode(800, 600, 32), "MyFirstWindow", sf::Style::Titlebar);
  sf::Event myevent;

  sf::Texture textur;
  textur.loadFromFile("Test.jpg");

  while (fenster.isOpen())
  {
    fenster.clear();
    fenster.display();
    while (fenster.pollEvent(myevent))
    {
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
        fenster.close();
    }
  }

  return 0;
}


Vielleicht kennt ja jemand den Fehler und kann mir helfen. Ich
bitte um eine (auch für mich) verständliche Erklärung.
Schon mal vielen Dank im Voraus.

LG,
Karl

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

2

18.11.2014, 18:40

Liegt das jpeg im selben Ordner wie die kompilierte exe?
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

3

18.11.2014, 18:59

Liegt das jpeg im selben Ordner wie die kompilierte exe?

Beziehungsweise: Startest du aus VS heraus? Dann muss die Datei im Projektordner liegen.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

18.11.2014, 19:01

Gib mal einen absoluten Pfad an und teste ob es klappt. VS hat wenn du es für C++ benutzt eine merkwürdige Eigenschaft. Das Ausführungsverzeichnis ist solange du die Anwendung aus VS heraus startest das Verzeichnis deiner Sourcefiles. Normal sucht deine Anwendung ja im Verzeichnis deiner Anwendung (das wo deine exe Datei am Ende auch zu finden ist). Soweit ich weiß ist das bei VS auch nur wenn du C++ als Sprache einsetzt. Bei den anderen guckt er im Anwendungsverzeichnis. Das kann man mit Sicherheit auch irgendwo einstellen. Wie gesagt zum testen ob es daran liegt kannst du ja mal einen absoluten Pfad verwenden. Dann sollte es gehen.

edit: da seid ihr schneller gewesen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

5

18.11.2014, 19:36

Ich habe mir zu dem Zweck eine kleine Exceptionklasse geschrieben, die folgenden Code beinhaltet:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#include <boost/lexical_cast.hpp>
#define BOOST_FILESYSTEM_VERSION 3
#include <boost/filesystem.hpp>

Filename::Filename(string Filename)
{
    using namespace boost;
    m_Filename=Filename;
    m_AbsFilename=lexical_cast<string>(filesystem::absolute(filesystem::path(Filename)));
}

Wenn jetzt das Laden einer Datei fehlschlägt, kann ich mir damit nicht nur den Dateinamen, sondern auch den absoluten Pfad an dem ich die Datei versuche zu laden anzeigen lassen. Dann merkt man sofort, ob das Programm ein falsches Ausführungsverzeichnis hat.
Lieber dumm fragen, als dumm bleiben!

6

18.11.2014, 19:42

Erstmal Danke für die sehr schnellen Antworten.

@ Nimelrian und Steef
Ich starte das Programm von VS aus (um zu testen
ob alles klappt). Daher habe ich
das Bild in den Ordner mit dem Namen des Projektes
gelegt.

@ Schorsch
Ich habe es versucht (C:Users\...), jedoch kam die
selbe Fehlermeldung. Weißt Du zufällig wo ich
einstellen kann wo gesucht wird? Ich habe
das Ganze auch schon in Code::Blocks versucht,
bekam jedoch die selbe Fehlermeldung.

Noch kurz eine Anmerkung:
Ich nutze SFML 2.1 32 Bit.

Edit:
@Jonathan Klein
Da hab ich deine Antwort doch glatt übersehen.
Leider bekomme ich beim Ausführen des Codes
immer folgende Fehlermeldung:

Quellcode

1
fatal error C1083: Datei (Include) kann nicht geöffnet werden: "boost/lexical_cast.hpp": No such file or directory


Hab ich etwas falsch gemacht?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Karl-Friedrich« (18.11.2014, 19:48)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

18.11.2014, 19:47

Liegts möglicherweise am Format? Kann SFML denn jpegs laden?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

8

18.11.2014, 19:50

@ Schorsch
Das müsste eigentlich laut Anleitung(en) funktionieren. Ich werde es
aber auch noch mal mit PNG probieren.

9

18.11.2014, 19:53

Die SFML kann JPEGs laden, aber keine progressiven. Ist das der Fall, bekommt man aber die Fehlermeldung, dass eben diese nicht unterstützt wird. Es kann nur daran liegen, dass die Datei nicht verfügbar ist.
Um Jonathans Ansatz zu benutzen benötigst du boost.
Alternativ gehts auch irgendwie so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#include <stdexcept>
#include <fstream>

void aviable(const std::string& name)
{
    std::ifstream str(name);
    if(str.bad())
        throw std::invalid_argument("\""+name+"\" not found.");
}


MfG
Check

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Checkmateing« (18.11.2014, 20:01)


10

18.11.2014, 20:10

@ Checkmateing
Dort bekomme ich auch einen Fehler:

Quellcode

1
error C2677: Binärer Operator '+': Es konnte kein globaler Operator gefunden werden, der den Typ 'const std::string' akzeptiert (oder keine geeignete Konvertierung möglich)


Edit:
Ok, wahrscheinlich bin ich zu blöd dazu :)
Könntest Du mir erklären wie ich das machen soll?
Soll ich das in den Code mit einbauen, oder separat
ausführen?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Karl-Friedrich« (18.11.2014, 20:25)


Werbeanzeige