Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C++] Prüfen ob Ordner existiert (https://www.delphipraxis.net/117933-%5Bc-%5D-pruefen-ob-ordner-existiert.html)

Aurelius 28. Jul 2008 16:37


[C++] Prüfen ob Ordner existiert
 
Hallo DPler :hi:

mit folgendem Code möchte ich prüfen ob ein Ordner existiert:
Code:
dwAttr = GetFileAttributes(p_csAnhang);
if( dwAttr & FILE_ATTRIBUTE_DIRECTORY)
{
   return true;
}
else
{
   return false;
}
Allerdings kommt dabei immer true raus, auch wenn der Ordner nicht existent ist. Bei der Überprüfung
Code:
dwAttr == FILE_ATTRIBUTE_DIRECTORY
hingegen wird manchmal false zurückgegeben, auch wenn der Ordner existent ist.

Ich hoffe ihr könnt mir wieder einmal helfen :)

Luckie 28. Jul 2008 21:58

Re: [C++] Prüfen ob Ordner existiert
 
Das geht so nicht. GetFileAttributes liefert dir eine Bitmaske zurück. Das heißt du musst prüfen, ob das entsprechende Bit gesetzt ist oder nicht.

In Delphi würde das so aussehen:
Delphi-Quellcode:
if (Attribut and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY) then
  // existiert
else
  // nicht da
In C:
Code:
if (Attribut && FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY)
{
  // existiert
}
else
{
  // nicht da
}
Für den C-Code lege ich meine Hand aber nicht ins Feuer, da bin ich nicht so firm drin.

Aurelius 28. Jul 2008 22:36

Re: [C++] Prüfen ob Ordner existiert
 
Grade probiert, geht leider nicht.

Naja, jetzt ist es eh zu spät und der Prof hat das Programm bekommen^^

Luckie 28. Jul 2008 22:44

Re: [C++] Prüfen ob Ordner existiert
 
Zitat:

Zitat von xX0815Xx
Grade probiert, geht leider nicht.

WAS geht nicht? Was sollen wir mit deiner Fehlerbeschreibung anfangen?

Apollonius 28. Jul 2008 22:51

Re: [C++] Prüfen ob Ordner existiert
 
Die erste Überprüfung von dir ist eigentlich richtig: Bitweises and mit dem &-Operator und das == FILE_ATTRIBUTE_DIRECTORY entfällt, da es ein einfaches Flag ist. Dein Fehler liegt vermutlich darin, dass GetFileAttributes DWord(-1) zurückgibt, falls ein Fehler (z.B. ungültiger Dateiname) aufgetreten ist. In DWord(-1) sind natürlich alle Flags gesetzt.

DeddyH 29. Jul 2008 07:31

Re: [C++] Prüfen ob Ordner existiert
 
Zitat:

Zitat von Luckie
Code:
if (Attribut && FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY)

Mein C ist auch mehr als eingerostet, aber AFAIR könnte es so gehen:
Code:
if (Attribut & FILE_ATTRIBUTE_DIRECTORY)//nur ein &, da Binärvergleich
[edit] :oops: Das stand ja schon im Ausgangspost. [/edit]

new32 29. Jul 2008 09:53

Re: [C++] Prüfen ob Ordner existiert
 
Zitat:

Zitat von Luckie
Code:
if (Attribut && FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY)

Die Bedingung wird von links nach rechts abgearbeitet:

ist Attribut!=0 (TRUE) wird geprüft, ob FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY.
Da die 2.Bedingung immer zutrifft, wird sie wohl wegoptimiert:
bleibt als Bedingung:
(Attribute!=0) und die wird auch bei nicht-ordnern true zurück geben.

die in der Fragestellung gepostete Bedingung sollte richtig sein.

müsste dann nach Apollonius nur noch etwas erweitert werden:
Code:
if(Attribute>=0 && Attribut&FILE_ATTRIBUTE_DIRECTORY) return 1;return 0;
oder auch:

Code:
return Attribute>=0 && Attribut&FILE_ATTRIBUTE_DIRECTORY;

Aurelius 29. Jul 2008 11:22

Re: [C++] Prüfen ob Ordner existiert
 
Danke für die Antworten, wieder was gelernt.

Luckie 29. Jul 2008 21:50

Re: [C++] Prüfen ob Ordner existiert
 
wie gesagt, meine C-Kenntnisse sind nicht die besten. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz