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

14.11.2006, 10:42

externe Dateipfade

Hallo

Wie kann ich eine Datei laden, welche einen beliebigen PFad hat, also nicht direkt im Projektordner sitzt.

Es soll sich dabei um eine Textur handeln. Die Dialoge zum Auswählen habe ich bereits.
Ich habe also bereits ein HANDLE der Datei, sowie den genauen Dateipfad.
Das Problem ist, dass ein Pfad der Sorte "c:\programme\..." beim anschließend Laden nicht akzeptiert wird.

Also anderst gefragt könnte man die Frage auch stellen, wie lade z.B. ich eine Textur, die direkt auf Laufwerk C liegt.


Gruß falcon

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

2

14.11.2006, 11:20

Ich schätze mal Du hast übersehen dass in C(++) in Strings '\' als "Escape Character" dient und Du musst daher "\\" benutzen, also z.B.

C-/C++-Quelltext

1
sName = "c:\\programme\\blahblah\\textur1.dds";


Wenn es das nicht sein sollte, poste bitte ein klein bischen Code.
"Games are algorithmic entertainment."

3

14.11.2006, 11:31

Hi

:( Ok, das war unnnötig, zumal ich im selben zusammenhang ständig den Pfad mit "\\" auseinandergenommen habe.

Danke dir, funktioniert natürlich.

Trotzdem bleibt mir nun ein Problem.

ICh habe bekomme nun ein char, welches den gesammten Pfad beinhaltet. Dieser wird in der Form "C:\...\...\...\..." geliefert.
Die einizge Möglichkeit, die mir nun einfällt den Pfad "lesbar" zu machen wäre ihn in ein zweites char zu kopieren und dabei jedes mal ein zusätzliches "\" einzufügen.
Das liese sich mit einer Schleife zwar recht einfach lösen, aber ist das wirklich die einzige Möglichkeit?

Gruß

falcon

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

4

14.11.2006, 12:14

Du musst an der Stelle, an welcher der Pfad definiert wird, darauf achten, dass jedes die Back-Slashes alles "escaped" (\\) sind.

Wenn du schon einen const char* als Parameter bekommst, darfst du das auf keinen Fall nochmal machen. Das ist nur, weil \ für den Compiler eine spezielle Bedeutung hat, die man mit \\ wieder auflöst. Im String steht dann auch nur ein \, was korrekt ist.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>

void load (const char* pfad)
{
  std::cout << pfad << std::endl;

  std::ifstream is (pfad);
  if (is)
    std::cout << "geoeffnet!" << std::endl;
  else
    std::cout << "nicht geoeffnet!" << std::endl;

  is.close ();
}

int main (int, const char**)
{
  load ("c:\mein\pfad\ist\falsch.txt"); // geht nicht!

  load ("c:\\mein\\pfad\\ist\\richtig.txt"); // geht.

  load ("c:/mein/pfad/ist/auch_richtig.txt"); // sollte auch gehen, kommt von UNIX.

}


Gruss,
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

5

14.11.2006, 14:12

Hi

Danke auch dir rklaffehn für die Antwort

Das mit dem "\\" ist mir schon klar.
Ich bekomme den Dateipfad als Char[] geliefert. Diesen Pfad wollte ich nun zum Laden der Textur verwenden.
Das Problem ist jedoch, dass das Char[] den Pfad in der Form "c:\...\...\..." und nicht "c:\\...\\...\\..." enthält.
Das Char bekomme ich von der Funktion POPFileOpenDlg kann also an der Form nichts ändern.
Ich hab das jetzt so gelöst, dass ich das Char zeichenweise in ein anderes Char übertrage und dabei jedes Mal ein "\" zusätzlich einfüge.
Ich finde diese Lösung nur nicht sehr elegant.

Gruß

falcon

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

14.11.2006, 14:23

Also POPFileOpenDlg habe ich nur in Zusammenhang mit anscheinend selbstgebastelten Sachen gefunden. Gehe ich richtig in der Annahme, dass diese so oder so ähnlich aussieht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
 // Den "Öffnen" Dialog anzeigen und das Handle zum File zurückliefern

BOOL PopFileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
{
   ofn.hwndOwner = hwnd;
   ofn.lpstrFile = pstrFileName;
   ofn.lpstrFileTitle = pstrTitleName;
   ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;

   return GetOpenFileName (&ofn);
}


P.S: rück doch einfach ein bisschen Quellcode raus. Macht es garantiert einfacher :) Und das Umformatieren ist ein Problem, was ich selbst nie hatte, daher wundert es mich ein wenig.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

7

14.11.2006, 16:12

Hi

Stimmt, ist schon ne Weile her, dass ich das Teil implementiert habe, sorry.
Die Geschichte hat sich übrigens gelöst. Es stimmt, das ganze funktioniert ohne umständliches Einfügen.
Das Problem lag viel mehr bei dem handle, welches dabei übergeben wird.
Den genauen Grund kann ich leider nicht sagen, hab da auch nicht nachgeforscht, aber da ich das Handle eigentlich nicht brauche, sondern nur den Pfad, hab ich das Teil rausgeworfen und siehe da, seit dem klappts.

Vielen Dank an Alle

Gruß

falcon

Dofter

Treue Seele

Beiträge: 159

Wohnort: im wunderbaren EBERMANNSTADT

Beruf: Schüler^^

  • Private Nachricht senden

8

14.11.2006, 18:07

Kann man für \\ nicht einfach nur / Schreiben (also bei mir gehts des)
"Wo kämen wir hin, wenn alle sagten, wo kämen wir hin, und keiner ginge,
um zu sehen, wohin wir kämen, wenn wir gingen"

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

14.11.2006, 18:10

@Dofter Es geht ja darum ein zurückgegebenen Wert zu nutzen, nicht um einen selbst angegebenen.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

eugler

Frischling

Beiträge: 26

Beruf: Student

  • Private Nachricht senden

10

27.10.2007, 15:33

das würde mich jetzt aber mal genauer interessieren, was genau aus dem code genommen worden ist. ich habe nämlich das gleiche vor: texturen laden und ich hab auch die BOOL PopFileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName) - funktion, die als return-wert GetOpenFileName (&ofn).... nun meine frage, ist das der pfad zu meiner ausgewählten datei, den ich dann an meine texturload-funktion weitergebe? was genau sagt da (&ofn) aus?
was sollte das mit dem Handle...

bitte helft mir, ich häng fest!

greetz

Werbeanzeige