Programmpfad abfragen



  • Wie kann ich den Programmpfad abfragen, also das Verzeichnis in dem das Programm gestartet wurde?

    Ich habe folgendes Problem, für das ich den Praf brauche.

    bool open_ini()
    {
      FILE *stream;
      stream=fopen("dat.ini","rt");
      //auslesen der ini
      fclose(stream);
    }
    

    Das Auslesen der ini funktioniert auch so weit, nur wenn ich vorher eine andere Datei in einem anderen Verzeichnis öffne,
    findet das Programm die ini nicht, da es in dem anderen Verzeichnis sucht.



  • daraus gebastelt das hat auf jedenfall
    was mit den Übergabeparametern der "int main(...){...}
    zu tun die dürfen nicht auf "void"
    lauten sondern "int main(int argc, char *argv[]) {...}

    meine Headerfile siieht nun wiefolgt aus

    #ifndef ENVIRON__H
    #define ENVIRON__H
    
    #define MAXSIGN 1025
    char* getProgramPath(int, char *[]);
    char* getProgramName(int, char *[]);
    
    char* getProgramPath(int argc, char *argv[])
    {
    	char path [MAXSIGN];
    	char *lastBackSlash = NULL;
    
    	if(argc > 0)
    	{
    		/* Ende des String ermitteln */
    		int index = 0;
    		while((argv[0][index]) != '\0')
    		{
    			++index;
    		}
    
    		/* letztes Backslash bestimmen vom Ende aus */
    		while(argv[0][index+1] != '\\')
    		{
    			lastBackSlash = &argv[0][index];
    			--index;
    		}
    
    		/* String bis zum letzten Backslash umkopieren */
    		index = 0;
    		while(&argv[0][index] != &lastBackSlash[0])
    		{
    			path[index]     = argv[0][index];
    			path[index + 1] = '\0';
    			index++;
    		}
    		return path;
    	}
    	else return NULL;
    }
    
    char* getProgramName(int argc, char *argv[])
    {
    	char *fromBackSlash = NULL;
    
    	if(argc > 0)
    	{
    		/* Ende des String ermitteln */
    		int index = 0;
    		while((argv[0][index]) != '\0')
    		{
    			++index;
    		}
    
    		/* letztes Backslash bestimmen */
    		while(argv[0][index+1] != '\\')
    		{
    			fromBackSlash = &argv[0][index];
    			--index;
    		}
    		return fromBackSlash + 1;
    	}
    	else return NULL;
    
    }
    #undef MAXSIGN
    #endif
    

    ich hoffe das sagt alles obwohl es in der WinAPI schon sowas vorgefertigt gibt

    mfg 🙂 😉



  • sclearscreen schrieb:

    ich hoffe das sagt alles obwohl es in der WinAPI schon sowas vorgefertigt gibt

    jo, das gibt es:

    #include <windows.h>
    GetModuleFileName ()


Log in to reply