JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Relativer Pfad ändert sich?

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.04.2006, 11:40    Titel: Relativer Pfad ändert sich? Antworten mit Zitat

CPP:
case IDC_TILESETLADEN:
         {
            char Dir[128], Name[128];
            ZeroMemory(Name, sizeof(Name));
            GetModuleFileName(NULL, Dir, 128);

            OPENFILENAME Filename;
            ZeroMemory(&Filename, sizeof(OPENFILENAME));
            Filename.lStructSize=sizeof(OPENFILENAME);
            //Filename.Flags=OFN_HIDEREADONLY;
            Filename.lpstrInitialDir=Dir;
            Filename.lpstrFile=Name;
            Filename.nMaxFile=128;
            if(GetOpenFileName(&Filename))
            {
               std::string Dateiname(Filename.lpstrFile), Directory(Dir);
               Directory.erase(Directory.rfind("\\"), 128);
               //Dateiname.replace(strlen(Dir), 0, "");

               //Dateiname.erase(0, Directory.length()+1);
               SetDlgItemText(hDlg, IDC_TILESET, Dateiname.c_str());
               cLog::GetInstance() << LOGV(Dateiname);
            }
         }
         break;


Ich habe das dumme Gefühl, das sich in diesem code aus Ausführungsverzeichnis des Programmes ändert.
Das Logbuch wird normalerweise im selben Verzeichnis wie die exe erstellt, aber wenn ich diesem Code ausführe wird die Log-Datei in das Verzeichnis geschreiben welches ich in dem FileopenDialog ausgewählt habe.
Das wäre ja nicht so schlimm, aber ich will eine Tilesetdatei laden, in der die Verzeichnisse für die Bilddateien stehen.
Das dumm ist nun, das diese Bilddateien im Unterordner images\Tiles\ gespeichert sind. Jetzt kann er die Bilder aber nicht mehr laden, weil sich anscheinend das relative Verzeichniss geändert hat.
Kopiere ich die Tilesetdatei aus dem Unterordner in das Verzeichniss der exe Datei funktioniert alles wie geplant.
Hat jemand ne Idee woran das liegen könnte?

[edit]Diese ganzen string Operationen sollte dazu dienen, das ich vom OpenfilenameDialgo einen relativen Pfad bekomme. Da das Verzeichnis der Tilesetdatei bestandteil eines Levels ist, muss das Verzeichniss ja realtiv sein, zu testzwekcne hab ich es hier jedeoch entfernt, bekomme also einen absoluten Dateinamen des Tilesets.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
51m0n
JLI'ler


Alter: 32
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 30.04.2006, 12:49    Titel: Antworten mit Zitat

Du kannst ja einfach den ausführungsort der .exe ermitteln und diese dann einfach vor den Dateinamen klatschen also etwa so:

CPP:
std::wstring pfad = GetCommandLineW();
size_t pos = pfad.find_last_of(L"\\")+1;
pfad = pfad.substr(0, pos);

std::wstring file = pfad;
file += L"Logfile.log";


Ich hoffe die Parameter stimmen so hab das gread aus dem kopf gemacht. Aber so müsste es eigentlich funktionieren.
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.04.2006, 13:32    Titel: Antworten mit Zitat

hm, was ist der Unterschied zwischen GetModulefilename und GetCommandLine. In der MSDN stand zu GetCommandLine nur das man damit die Command Line bekommt (na toll...).
Ich wüsste auch gerne wie es sein kann, das er die Datei findet, wenn ich den Code nicht ausführe, und sobal dich den Dialog einmal ausgeführt habe er die Dateien nicht mehr finen (öffnen) kann.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
51m0n
JLI'ler


Alter: 32
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 30.04.2006, 13:39    Titel: Antworten mit Zitat

Wenn GetOpenFileName() benutzt werden die relativen Pfade nicht mehr an den aufführungspfad der .exe sondern an den Ordner der bei GetOpenFileName() ausgewählt wurde angehängt.

Ich glaube mit GetModulefilename() bekommst du nur den Pfad der .exe und mit GetCommandLine() die komplette Kommandozeile also auch mit den übergeben Werten.
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.04.2006, 14:51    Titel: Antworten mit Zitat

51m0n hat Folgendes geschrieben:
Wenn GetOpenFileName() benutzt werden die relativen Pfade nicht mehr an den aufführungspfad der .exe sondern an den Ordner der bei GetOpenFileName() ausgewählt wurde angehängt.

Das würde ja alles erklären. Wie kann man das rückgängig machen? Außer das man sicch biem Programmstart den Pfad merkt und bei allen Ladeoperationen davor schreibt.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 30.04.2006, 17:08    Titel: Antworten mit Zitat

Versuch mal SetCurrentDirectory()
Die Funktion setzt das aktuelle Verzeichnis, was AFAIK auch der Bezugspunkt für alle relativen Pfade ist.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.04.2006, 19:13    Titel: Antworten mit Zitat

dankesehr, hat geholfen. Ganz schön frech von GetOpenFilename das der Pfad verändert wird!
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 437

Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 10:41    Titel: Antworten mit Zitat

Deswegen hat die OPENFILENAME-Struktur nen Member namens Flags. Wink Dem gibt man OFN_NOCHANGEDIR, und ruh is. Wink
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 01.05.2006, 11:37    Titel: Antworten mit Zitat

Oh cool, dankeschön Smile
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum