[VC++ 6.0] Problem bei Pfadprüfung mit <_chdir>

vfl_freak

Premium-User
Hallo zusammen,
ich habe ein für mich unerklärliches Phänomen beim Aufruf der genannten Funktion _chdir.
In unserer Anwendung soll für einen bestimmten Zweck die Existenz eines Pfads geprüft werden. Meines Wissen kann ich hierfür nur diese Funktion einsetzen, die ja das aktuelle Arbeitsverzeichnis wechselt! Sie gibt mir lt. Hilfe eine '0' zurück, wenn der Wechsel erfolgreich war und '-1' sonst.

Code:
checkFibuDateiPfad( string sFirma, string sNSL, string sJahr )
(
    int iErg = 0;
    int iRes = 0;

    // Pfad zusammenfrickeln
    string strPfad;
    strPfad =  "F:\\ORGA\\DAT\\CRMABR\\FINABUCH\\Firma";
    strPfad += sFirma;
    strPfad += "\\";
    strPfad += sNSL;
    strPfad += "\\";
    strPfad += sJahr;

    // Versuchen, in das angegebene Verzeichnis zu wechseln ('0' = Erfolg)
    const char *ch = strPfad.c_str();
    iRes = _chdir( ch );
    if( -1 == iRes )
    {
        iErg = 1;
    }

    return iErg;
}
Als einen korrekt zusammengebastelten Suchpfad sehe ich dann im Debugger bspw. "F:\ORGA\DAT\CRMABR\FINABUCH\Firma03\00000100\2008" !!
Soweit, so schlecht :rolleyes:

Ich habe nun im Rahmen einiger Tests das Verzeichnis "2008" zunächst in "SIK_2008" umbenannt - und bekomme die korrekte Meldung "Pfad nicht vorhanden".
Nach erneutem Umbenennen auf "2008" kommt die korrekte Meldung "Pfad vorhanden".

Wenn ich nun jedoch das Verzeichnis erneut auf "SIK_2008" umbenenne (oder auch auch komplett lösche), liefert mir _chdir stets eine '0', so als wenn der Pfad existieren würde!!

Was um alles in der Welt mache ich hier falsch ? :confused:
Hoffentlich hat irgendjemand die zündende Idee ... :)

Danke im voraus!
Gruß
Klaus

// edit : ein (wenn auch mieser) Workaround scheint zu sein, zu Beginn meiner Funktion erst einmal
Code:
_chdir( C:\\Windows);
aufzurufen, obwohl ich ich die Lösung eigentlich nicht sonderlich mag .....
 
Zuletzt bearbeitet:
Meines Wissen kann ich hierfür nur diese Funktion einsetzen, die ja das aktuelle Arbeitsverzeichnis wechselt!
Nicht unbedingt; Du kannst auch die Funktion "_access()" verwenden:
C++:
#include <io.h>

...  
  
iRes = _access( ch, 0 );

if( 0 == iRes )
{
    iErg = 1;
}

...
Das Verhalten von _chdir() kann ich gerade nicht erklären. Mit _access() solltest du diese Probleme nicht haben und brauchst zum Testen auch nicht den Pfad zu wechseln.

Gruß
MCoder
 
Hallo McCoder,

jau, das war genau dass, was ich gebraucht hatte! :)

Jetzt klappt es problemlos (auch ohne meinen unschönen Workaround) !!

Danke für den Tipp!!
tschüss
Klaus
 
Zurück