Existiert eine Art isFile()-Funktion in C++?

Hi zusammen,
meine Frage erscheint äußerst trivial, beschäftigt mich aber schon seit fast zwei Tagen:
Mein Programm kriegt über die Konsole eine Pfadangabe mit, es wird auch überprüft, ob dieser Pfaf existiert, allerdings wird kein Fehler geschmissen, wenn der Pfad eine Datei bezeichnet.

Ich hab schon mit ifstream,msdn - library und was weiß ich was rumgespielt, aber keine Funktion, konnte mir bisher wirklich sagen - es ist ein Verzeichnis oder es ist eine File.

In diesen Pfad soll via ofstream Dateien geschrieben werden, aber auch dabei krieg ich bei einer Dateiangabe im Pfad keinen Fehler.

Weiß wer Bescheid? Bin für jede Hilfe, jeden Tipp oder Hiweis sehr dankbar. Einfach posten, was euch grad einfällt.

Thx & Greetz

Reverse!
 
So funktioniert das bei mir in meinem eigenen Dateibaum:
Code:
        struct _finddata_t c_file;
        if( (long hFile = _findfirst( LPCTSTR(suchdir), &c_file )) == -1L ){
            //keine Datei/Verzeichnis gefunden
        }else{
                //=>richtige verzeichnisse heraussuchen
                if (c_file.attrib & _A_SUBDIR){
                      //Behandlung für Verzeichnisse
                }else{
                      //Behandlung für Dateien
                }
         }
 
jedem Eintrag im Filesystem sind Attribute zugeordnet.

Code:
if (c_file.attrib & _A_SUBDIR) {

} else {

}
Diese if-Abfrage prüft in der Bedingung ob ein bestimmtes Bit in den Attributen des Eintrags gesetzt ist. Das bit heißt _A_SUBDIR und bezeichnet vermutlich ein Verzeichnis, soll heißen wenn der Eintrag ein Verzeichnis ist, dann wird dieses Bit gesetzt.
Die Bitweise UND-Verknüpfung filtert dieses Bit aus den Attributen heraus. Wenn es gesetzt ist, ist der Wert des Ausdrucks c_file.attrib & _A_SUBDIR gleich 1 und damit wahr. Sonst ist er 0 und damit falsch.

Alle Klarheiten beseitigt?
 
Ganz ehrlich, ich krieg´s nicht gebacken. Ich habs nochmal über

HANDLE h;
WIN32_FIND_DATA FindFileData;
DWORD tester = GetFileAttributes(path);
LPBY_HANDLE_FILE_INFORMATION inf;

h = FindFirstFile(path,&FindFileData);

bool hm = GetFileInformationByHandle(h,inf);
cout << "hm:" << hm << endl;

if (tester == FILE_ATTRIBUTE_DIRECTORY FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
cout<<"directory" << endl;
}
else cout<<"file" << endl;


versucht, aber es wollte einfach nicht. Irgendwie gibt es nie einen eindeutigen Hiweis auf file oder directory, egal was ich versuch :mad:

Wenn nochmal wer ein bisschen Geduld aufbringen mag und mir mal haarklein erklären könnte, wie ich das überprüfen kann wär das echt saustark.
 
Hab auch folgendes versucht:

struct _finddata_t c_file;
long hFile = _findfirst (path,&c_file);

if (c_file.attrib & _A_SUBDIR)
{
cout << "directory" << endl;
}
else
{
cout << "file" << endl;
}

aber ich krieg auch bei der Eingabe von C:\ in die Kommandozeile nur "file" geliefert! VERZWEIFLUNG!
 
Unter Linux funktioniert das mit __ftw_func_t aber ich glaube nicht, dass das in Windows so gehandhabt wird (wegen softlinks, hardlinks und slash statt backslash)

So wie ich das damals unter Windows gemacht habe, hat es zu 100% funktioniert.
Ich habe nur noch die Behandlung der Verzeichnisse ".." und "." hinzugefügt.
 

Neue Beiträge

Zurück