Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.04.2006, 10:40 Titel: Relativer Pfad ändert sich? |
|
|
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 |
|
|
51m0n JLI'ler
Alter: 33 Anmeldedatum: 06.01.2006 Beiträge: 167 Wohnort: Erkelenz Medaillen: Keine
|
Verfasst am: 30.04.2006, 11:49 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.04.2006, 12:32 Titel: |
|
|
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 |
|
|
51m0n JLI'ler
Alter: 33 Anmeldedatum: 06.01.2006 Beiträge: 167 Wohnort: Erkelenz Medaillen: Keine
|
Verfasst am: 30.04.2006, 12:39 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.04.2006, 13:51 Titel: |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 30.04.2006, 16:08 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.04.2006, 18:13 Titel: |
|
|
dankesehr, hat geholfen. Ganz schön frech von GetOpenFilename das der Pfad verändert wird! _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 01.05.2006, 09:41 Titel: |
|
|
Deswegen hat die OPENFILENAME-Struktur nen Member namens Flags. Dem gibt man OFN_NOCHANGEDIR, und ruh is.
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
|
Nach oben |
|
|
|