# Aktuellen Pfad ermitteln



## HolgerX (7. Juli 2004)

Wie kann ich den aktuellen Pfad ermitteln, also den Pfad, in dem mein Programm gestartet wurde?


----------



## frager (7. Juli 2004)

```
int main(int argc, char **argv)
```
Der Pfad mit dem Dateinamen steht schon in argv[0], du musst nur den Pfad und den Dateinamen voneinander trennen.

Bsp.:

```
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
	char path[FILENAME_MAX+1];
	int pos;

	memset(path, 0, (FILENAME_MAX + 1) * sizeof(char));
	pos = (strrchr(argv[0], '\\\') - argv[0]) * sizeof(char);
	strncpy(path, argv[0], pos);

	printf("path: %s\n", path);

	return 0;
}
```


----------



## HolgerX (7. Juli 2004)

Ich hätte wohl sagen sollen, dass ich mit Visual Studio arbeite (das vielleicht auch bei MFC & Visual Studio posten sollen).   

Da gibts keine main-Methode!


----------



## Kachelator (7. Juli 2004)

> _Original geschrieben von HolgerX _
> *Ich hätte wohl sagen sollen, dass ich mit Visual Studio arbeite *


Stimmt.  

Nimm _GetModuleFileName()_ .

(Bei Konsolen- und Win32-Anwendung ohne MFC gibt es übrigens eine main() )


----------



## HolgerX (8. Juli 2004)

Schon schön, aber wie komme ich an _lpFilename_

```
DWORD GetModuleFileName(
  HMODULE hModule,    // handle to module to find filename for
  LPTSTR lpFilename,  // pointer to buffer to receive module path
  DWORD nSize         // size of buffer, in characters
);
```
und woher weiss ich, wie groß _nSize_ ist?


----------



## Dudadida (8. Juli 2004)

Na du musst doch einen definieren bspw.:


```
char buffer[256];
...
GetModuleFileName(hModule,buffer,256);
```


----------



## HolgerX (8. Juli 2004)

Ja, jetzt sehe ich das auch!  

Ich habe _hModule_ NULL gesetzt, bekomme jetzt auch den Pfad, aber immer eine *2* als CString-Wert, den ich nicht loswerden kann.


----------



## Kachelator (8. Juli 2004)

> bekomme jetzt auch den Pfad, aber immer eine 2 als CString-Wert, den ich nicht loswerden kann.


  Wssss?


----------



## HolgerX (8. Juli 2004)

Hat wohl mit dem DWORD zu tun, das von GetModuleFileName zurückgegeben wird, oder?


----------



## Kachelator (8. Juli 2004)

Guck doch bitte mal in die Dokumentation!



> Return Values
> If the function succeeds, the return value is the length, in characters, of the string copied to the buffer.
> 
> If the function fails, the return value is zero. To get extended error information, call GetLastError.


----------



## HolgerX (8. Juli 2004)

Tja, wie wäre ich doch ohne den Kachelator aufgeschmissen. 
 
Ähem, ich hätte da noch ne Frage, die steht hier: http://www.tutorials.de/tutorials163461.html


----------

