Openfile und die Pfadangaben
-
Hallo,
ich habe ein Problem: Wenn ich einen einfachen Datei-Öffnen Dialog aufrufe (Mit WinAPI, OPENFILENAME), sind die relativen Pfadangaben verfälscht.
Vorgeht die Pfadangabe:
.\\data\\game.ini
Nachher aber nicht mehr. Der Computer findet die Datei nicht mehr.
Gibt es möglichkeiten, dieses Problem zu beseitigen?
Danke,
Chrissi
-
Hi,
Das Problem kenne ich und hatte ich auch. Du musst erst wieder das Stammverzeichnis öffnen, wo die Exe liegt. Frag mich nicht warum
void GetFileDirectory(char *directory) { TCHAR FileName[MAX_PATH]; int result; char *pdest; char sztemp[MAX_PATH]; GetModuleFileName(NULL, FileName, MAX_PATH); /* Search forward. */ pdest = strrchr( FileName,'\\'); result = pdest - FileName + 1; if(pdest != NULL) { lstrcpy(sztemp,""); for(int i=0;i<result;i++) { sztemp[i] = FileName[i]; }//for sztemp[i] = '\0'; lstrcpy(directory,sztemp); }//if else lstrcpy(directory,""); }// GetFileDirectory
MfG Unwissender
-
Dieser Dialog heit eine Datenstruktur die richtig gesetzt sein muß
Häng das OFN_NOCHANGEDIR Flag noch mit an dann wird dein Arbeitsdirectory nicht gewechselt.
Der Dateiname hat den ganzen Pfad zu sich mit dabei, so das man die Datei öffnen kann.OPENFILENAME ofn; ..... ofn.Flags=OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR; .....
-
MSDN Library schrieb:
OFN_NOCHANGEDIR
...
Windows NT 4.0/2000/XP: This flag is ineffective for GetOpenFileName.
-
Du solltest eh keine relativen Pfade direkt zum Aufruf verwende, sondern immer erst den Pfad der Anwendung ermitteln und dann den relativen Pfad anhängen.
// Pfad der Anwendung ermitteln CHAR szAppPath[MAX_PATH]; GetModuleFileName(NULL,szAppPath,sizeof(szAppPath)); *(strrchr(szAppPath,'\\')+1) = 0; // Pfad zur Datei zusammensetzen CHAR szFile[MAX_PATH]; lstrcpy(szFile,szAppPath); lstrcat(szFile,"config.ini");
-
Hallo Unwissender,
was soll den der Funktion übergeben werden?
Danke,
C
-
Interessanterweise hatte ich ohne das Flag die Schwierigkeit, das er das Verzeichnis dahin gewechselt hat. Da unsere Applikationen
beginnend bei Win98 bis Xp laufen muss, sind wir e gezwungen es zu nutzen, da die älteren Windows Versionen es ea auf jedenfall brauchen. Daran sollte man dabei auch denken
-
@~chrissi
Du musst nur ein Char-String übergeben und erhälst dann Stammverzeichnis der Anwendung.
TCHAR FileName[MAX_PATH+1]; //.. GetFileDirectory(FileName); lstrcat(FileName,"\\"); lstrcat(FileName,"..\\data\\game.ini"); // z.B.
MfG Unwissender
-
Hi,
jetzt funktioniert alles. Ich hab jetzt eine eigene Funktion geschrieben.Ich habe nur eine Frage: Wie kann ich in einem C-Char-String ".\" in "" ersetzen?
Danke,
Chrissi
-
Es geht ja einfacher mit Strings. Ich MUSS aber einen Char-String zurückgeben. Also wie kann ich einen std-String in einen Char-String umwandeln. Mit Casting geht das nicht...
Danke...
-
Schuldigung, schon erledigt.