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;
    .....
    

    http://www.c-plusplus.net/forum/viewtopic.php?t=49603



  • 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.


Anmelden zum Antworten