| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen | 
	
	
		| Autor | Nachricht | 
	
		| Jonathan_Klein Living Legend
 
  
 Alter: 38
 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: 38
 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: 38
 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: 38
 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: 38
 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: 37
 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: 38
 Anmeldedatum: 17.02.2003
 Beiträge: 3433
 Wohnort: Siegerland
 Medaillen: Keine
 
 
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		|  |