# Prüfen ob Verzeichnis existiert



## chriss_2oo4 (8. Januar 2008)

Hi,

Wie man schon am Header sehen kann, suche ich eine Funktion, mit deren Hilfe ich festellen kann ob ein Verzeichnis existiert oder nicht.

Google hab ich verwendet, hab allerdings nur Lösungen gefunden, die mir verraten ob eine Datei existiert.
Da ich eine DLL erstellen möchte stehen mir keine Funktionen von .NET o. Ä. zur Verfügung.

lg Chriss


----------



## GillBates (8. Januar 2008)

Schau dir in der MSDN mal 
	
	
	



```
_mkdir
```
 an. Vllt ist das was für dich.


grüssle


----------



## chriss_2oo4 (8. Januar 2008)

Hi,

wenn ich in MSDN _mkdir in die Suche eingebe finde ich nichts was mir weiterhilft. Meine Entwicklungsumgebung (VS2005) kennt die Funktion anscheindend auch nicht.

Vielleicht kannst du mir ja noch ein paar detailliertere Tipps geben?

Lg Chriss


----------



## Ryu1991 (8. Januar 2008)

Benutz mal die Forensuche, naja, was solls, hier ne Funktion, die deine Probleme lösen sollte.

```
bool DirectoryExists( const char* pzPath ){
    DIR *pDir;
    bool bExists = false;

    pDir = opendir (pzPath);

    if (pDir != NULL){
            bExists = true;
            closedir (pDir);
    }
    return bExists;
}
```


----------



## GillBates (8. Januar 2008)

chriss_2oo4 hat gesagt.:


> Hi,
> 
> wenn ich in MSDN _mkdir in die Suche eingebe finde ich nichts was mir weiterhilft. Meine Entwicklungsumgebung (VS2005) kennt die Funktion anscheindend auch nicht.
> 
> ...



? Merkwürdig ?

Versuchs mal hiermit: http://msdn2.microsoft.com/en-us/library/2fkk4dzw(VS.71).aspx

Ansonsten mit 
	
	
	



```
_mkdir c++
```
 google quälen 



> ```
> int _mkdir(
> const char *dirname
> );
> ...



grüssle


----------



## chriss_2oo4 (9. Januar 2008)

Hi,

nochmals Danke für die Antworten! Ich hab beide Beispiele probiert, leider hat keins funktioniert.

Der Compieler sagt immer "undeclared identifier" komisch ist jedoch dass die IDE die Funktion kennt, sie zeigt mir nämlich sobald ich "_mkdir(" schreibe den gesamten Prototyp "int _mkdir( char * ... )" an.

Mit C++ hat man immer ärger -> was hab ich bitte falsch gemacht?


```
if( (_mkdir(a_pcFolderPath)) == 0 )
{
              iRet = INVALIDPATH;
              RemoveDirectory(a_pcFolderPath);
}
```

Das Beispiel von Ryu hab ich 1:1 übernommen -> funktioniert leider auch nicht: "undeclared identifier"

lg Chriss


----------



## GillBates (9. Januar 2008)

chriss_2oo4 hat gesagt.:


> Hi,
> 
> nochmals Danke für die Antworten! Ich hab beide Beispiele probiert, leider hat keins funktioniert.
> 
> ...




```
#include <direct.h>
```
hast du den drin?

bzw. wenn du ein UNICODE Projekt hast, dann heisst der Kollege: *_wmkdir*


grüssle


----------



## Ryu1991 (9. Januar 2008)

Tschuldigung, dass ich vergessen habe, dir den Header zu sagen, du brauchst den: 
	
	
	



```
dirent.h
```


----------



## chriss_2oo4 (9. Januar 2008)

Hi,

Header sind drin, hab ich aus MSDN übernommen, ich verwende auch keinen Unicode.

@Ryu:
Muss ich dire*n*t.h einbindend oder dire*c*t.h

lg Chriss


----------



## GillBates (9. Januar 2008)

chriss_2oo4 hat gesagt.:


> Hi,
> 
> Header sind drin, hab ich aus MSDN übernommen, ich verwende auch keinen Unicode.
> 
> ...



für seinen Code *dirent.h*. Ist für *opendir*


----------



## MCoder (9. Januar 2008)

Der Header "dirent.h" ist im VC leider nicht verfügbar.

Die Lösung des probeweisen Verzeichnisanlegens für eine reine Existenzüberprüfung finde ich nicht ganz so toll.
Daher hier noch ein Vorschlag:

```
#include <sys/stat.h>

bool Exists(const char* Path) // 'Path' ohne abschliessenden Backslash verwenden 
{
    struct stat my_stat;
    return (stat(Path, &my_stat) == 0);
}
```
Gruß
MCoder


----------



## Ryu1991 (9. Januar 2008)

Wieso ist dirent.h nicht verfügbar? Typisch MS (Borland C++ Builder ftw), naja, er hat ja nicht gesagt, dass er VC++ benutzt, sondern ehr das gegenteil, oder?


----------



## MCoder (9. Januar 2008)

Ryu1991 hat gesagt.:


> naja, er hat ja nicht gesagt, dass er VC++ benutzt, sondern ehr das gegenteil, oder?


Doch, steht in seinem zweiten Post


----------



## Ryu1991 (9. Januar 2008)

:-(UPS. Ich glaube es gibt in VC++ irgend welche funktionen, die das selbe machen nur anders heißen, du müsstest nur einen header und dann opendir und closedir oder so austauschen. Musst du mal googeln

Du könntest auch schauen, ob du einfach die dirent.h im VC++ integrieren kannst^^


----------



## chriss_2oo4 (10. Januar 2008)

Ok,


```
bool Exists(const char* Path) // 'Path' ohne abschliessenden Backslash verwenden 
{    
struct stat my_stat;    
return (stat(Path, &my_stat) == 0);
}
```

Funktioniert leider auch nicht. Ich habs jetzt einfach anders gelöst:

Hab Verzeichnis- und Dateifehler zusammengefasst

Die Datei, die von der Funktion geprüft werden soll, liegt ja auch im angegebenen Verzeichnis -> wenn Verzeichnis nicht existiert kann die Datei auch nicht geöffnet werden und es wird ein Fehler zurückgegeben.

Zwar kann ich jetzt nicht mehr sagen, ob der Fehler an Verzeichnis- oder an der Dateiangabe liegt, aber das Programm erfüllt trotzdem seinen Zweck.

Lg Chriss


----------



## FBIagent (12. Januar 2008)

Wenn du sagst, das du dies nur unter Windows als DLL Kompilierst könntest du auch die
WINAPI benutzen:

```
DirExists(std::string Dir) {
    HANDLE FindHandle;
    WIN32_FIND_DATAA W32FindData;
    size_t DirLen = Dir.length();

    if ( Dir.at( length - 1 ) != '\\' && Dir.at( length - 1 ) != '/' ) {
        Dir += "\\";
    }

    Dir += "*.*";
    FindHandle = FindFirstFile( Dir.c_str(), &W32FindData );

    if ( FindHandle == INVALID_HANDLE_VALUE) {
        int ErrNum = GetLastError();

        // The given path is invalid! || Directory name or volume label syntax is incorrect!
        if ( ErrNum == ERROR_PATH_NOT_FOUND || ErrNum ==  ERROR_LABEL_QUESTIONABLE ) {
            return false;
        } else {
            return true;
        }
    }

    FindClose( FindHandle )
    return true;
}
```


Best wishes
FBIagent


----------

