Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi DirectoryExists liefert falsches Ergebnis (https://www.delphipraxis.net/200405-directoryexists-liefert-falsches-ergebnis.html)

BigAl 17. Apr 2019 10:13

DirectoryExists liefert falsches Ergebnis
 
Hallo zusammen,

bin momentan dabei verschiedene Pfade auf deren Existenz zu prüfen. Leider arbeitet DirectoryExists scheinbar nicht sehr zuverlässig. In den meisten Fällen passt das Ergebnis, aber manchmal eben nicht.

Ich habe z.B. ein lokales Verzeichnis: C:\Windows\System32\OpenSSH

Ein Aufruf von DirectoryExists('C:\Windows\System32\OpenSSH') liefert mir bei diesem Verzeichnis immer False. In GetLastError steht dann 2 (File not Found). Alle anderen Verzeichnisse in "System32" werden als existent erkannt. Berechtigung schließe ich auch aus. Es ist ein physikalisches Verzeichnis. Mir gehen die Ideen aus...

Gibt es eine (zuverlässigere) Alternative zu DirectoryExists? Delphi arbeitet ja mit GetFileAttributes. Das ist wohl auch der von Microsoft vorgeschlagene Weg.

Danke schon mal für Eure Antworten.

Alex

Der schöne Günther 17. Apr 2019 10:40

AW: DirectoryExists liefert falsches Ergebnis
 
Die Funktion
Delphi-Quellcode:
DirectoryExists(..)
ist korrekt.

64-Bit-Anwendung auf 64-Bit-Windows? Dann macht das Sinn. Mach aus deiner Anwendung mal 64 Bit, dann sollte
Delphi-Quellcode:
True
rauskommen.

Ansonsten noch 2 andere Möglichkeiten:
https://social.msdn.microsoft.com/Fo...=csharpgeneral

BigAl 17. Apr 2019 11:09

AW: DirectoryExists liefert falsches Ergebnis
 
Dem schönen Günther sei Dank :-)

Werd's nachher gleich testen....

DieDolly 17. Apr 2019 11:12

AW: DirectoryExists liefert falsches Ergebnis
 
Zitat:

Ein Aufruf von DirectoryExists('C:\Windows\System32\OpenSSH') liefert mir bei diesem Verzeichnis immer False. In GetLastError steht dann 2 (File not Found). Alle anderen Verzeichnisse in "System32" werden als existent erkannt. Berechtigung schließe ich auch aus. Es ist ein physikalisches Verzeichnis. Mir gehen die Ideen aus...
Darf sowas überhaupt passieren? Es sollte doch egal sein, ob die Anwendung 32 oder 64 bittig ist. Das Verzeichnis auf auf der Festplatte aus die Maus.

BigAl 17. Apr 2019 11:22

AW: DirectoryExists liefert falsches Ergebnis
 
Zitat:

Zitat von DieDolly (Beitrag 1430489)
Zitat:

Ein Aufruf von DirectoryExists('C:\Windows\System32\OpenSSH') liefert mir bei diesem Verzeichnis immer False. In GetLastError steht dann 2 (File not Found). Alle anderen Verzeichnisse in "System32" werden als existent erkannt. Berechtigung schließe ich auch aus. Es ist ein physikalisches Verzeichnis. Mir gehen die Ideen aus...
Darf sowas überhaupt passieren? Es sollte doch egal sein, ob die Anwendung 32 oder 64 bittig ist. Das Verzeichnis auf auf der Festplatte aus die Maus.

Also erstmal, Günther hat recht. Es funktioniert, sobald die Anwendung 64 Bit ist.

Und dann zum Zweiten: Ist mir auch schleierhaft warum die 32-Bit Anwendung sich da anders verhält. Eine Erklärung wäre cool :-).

Delphi.Narium 17. Apr 2019 11:26

AW: DirectoryExists liefert falsches Ergebnis
 
Gleiches Thema: https://www.delphipraxis.net/134417-...st-fehler.html

Link in erster Antwort folgen.

DieDolly 17. Apr 2019 11:32

AW: DirectoryExists liefert falsches Ergebnis
 
Ein echt tolles Feature :wall:
Wenn man als Programmierer System32 abfragt, dann nicht ohne Grund. Wenn man was in SysWOW64 abfragen will, dann weiß man das für gewöhnlich.
Aber standardmäßig einfach umzulenken ist verwirrend.

Schokohase 17. Apr 2019 11:49

AW: DirectoryExists liefert falsches Ergebnis
 
Bevor man sich ereifert sollte man ergründen warum das so gemacht wird.

Grundsätzlich ist es immer von Vorteil, wenn man das Gelände (hier das OS) kennt, wo man sich aufhält (programmiert), dann stolpert man auch weniger

Dalai 17. Apr 2019 19:03

AW: DirectoryExists liefert falsches Ergebnis
 
Zitat:

Zitat von DieDolly (Beitrag 1430493)
Aber standardmäßig einfach umzulenken ist verwirrend.

Ist es, und es hätte vielleicht bessere Wege für MS gegeben, x64 zu implementieren. Aber es ist nun einmal so, und es gibt Gründe, warum es so ist wie es ist - hauptsächlich Abwärtskompatibilität. Was würde passieren, wenn ein 32-bit Programm nicht umgeleitet würde, wenn es DLLs vom System laden will? Es würde versuchen, 64-bit DLLs zu laden, was scheitern wird und muss.

Grüße
Dalai

Dennis07 20. Apr 2019 00:05

AW: DirectoryExists liefert falsches Ergebnis
 
Kurze Frage, warum
Delphi-Quellcode:
DirectoryExists
und nicht
Delphi-Quellcode:
TDirectory.Exists
?
Besonders bei Multiplatform-Anwendungen solltest du die Klassen der Unit System.IOUtils verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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