Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehleranfääliges DirectoryExists auch in Delphi > XE 1? (https://www.delphipraxis.net/182746-fehleranfaeaeliges-directoryexists-auch-delphi-xe-1-a.html)

hathor 14. Nov 2014 15:44

AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
 
An den TE:
Teste doch mal diesen Code aus XE2:
http://www.delphipraxis.net/1222644-post11.html

jensw_2000 14. Nov 2014 22:05

AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1279845)
Zitat:

Zitat von Sir Rufo (Beitrag 1279839)
Soso, und wenn dieser Fehler da ist, dann ist es trotzdem ein existierendes Verzeichnis und der Rückgabewert muss
Delphi-Quellcode:
true
sein?

Ich meine schon. Schließlich existiert ja die Root des Share. Ob ich da reinschreiben kann ist wieder eine andere Frage.

Genau hier liegt der Hase im Pfeffer.
Die "Root des Shares" ist der Server bzw. die "DFS Farm", da kann man nie was hinschreiben. Es ist kein Ordner.
Das Share ist die Bezeichnung hinter dem Servernamen.

Also:
\\Server\ <<--- hier schreibt keiner was hin.
FileExists und DirectoryExists müssen fehlschlagen. Es kann auch kein "\\Server\." oder "\\Server\.." geben.

\\Server\Share\ <<--- hier schon (DirectoryExists muss klappen, wenn die Berechtigungen vorhanden sind)
\\Server\Share\SubDirectory\ <<--- da auch (DirectoryExists muss klappen, wenn die Berechtigungen vorhanden sind)
\\Server\Share\File <<--- hier ebenfalls (FileExists muss klappen, wenn die Berechtigungen vorhanden sind)
\\Server\Share\SubDirectory\File <<--- genau wie dort (FileExists muss klappen, wenn die Berechtigungen vorhanden sind)

Uwe Raabe 14. Nov 2014 22:56

AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
 
Zitat:

Zitat von jensw_2000 (Beitrag 1279864)
Das Share ist die Bezeichnung hinter dem Servernamen.

Das ist aber auch genau das, was ich aus der MSDN-Doku unter network share verstanden habe.

Sir Rufo 15. Nov 2014 00:28

AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1279866)
Zitat:

Zitat von jensw_2000 (Beitrag 1279864)
Das Share ist die Bezeichnung hinter dem Servernamen.

Das ist aber auch genau das, was ich aus der MSDN-Doku unter network share verstanden habe.

Das will auch niemand bestreiten, allerdings ist die Frage ja auch ein ganz andere:
Zitat:

Soll
Delphi-Quellcode:
DirectoryExists( '\\Server' )
tatsächlich ein
Delphi-Quellcode:
true
zurückliefern?
Klarer Fall: Nein, denn das ist kein Verzeichnis!

Eigentlich wäre es noch zu überlegen, ob hier nicht sogar eine Exception geworfen werden müsste, weil ja gar kein gültiger Verzeichnisname angegeben wurde, aber das verwirrt hier jetzt wohl mehr.

samso 15. Nov 2014 06:36

AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
 
Bei FileExists gibt/gab es ja eine ähnliche Abfrage. Dort hatte diese Abfrage den Sinn, im Fall einer gelockten Datei (z.b. ShareExclusiv) wieder zur alten Suche via FindFirst zurück zu fallen. Gibt es unter Windows die Möglichkeit ein Directory zu locken? Oder hat der Programmierer von DirectoryExists einfach zu viel Copy&Paste betrieben?

Sir Rufo 15. Nov 2014 10:31

AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
 
Nur so am Rande erwähnt, es gibt da z.B. den Fehler
Delphi-Quellcode:
ERROR_INVALID_PASSWORD
.

Angenommen es gibt ein Netzwerk-Device mit dem Namen
Delphi-Quellcode:
Server
und ich habe dort aber keine Berechtigung, dann liefert jede Abfrage
Delphi-Quellcode:
DirectoryExists( '\\Server\KomischesVerzeichnisDasEsAuchEhNichtGibt\' )
ganz stumpf ein
Delphi-Quellcode:
true
zurück.

Insgesamt muss man den hier auch den Kontext betrachten. So liefert auch eine Abfrage auf
Delphi-Quellcode:
\\.\COM1
oder
Delphi-Quellcode:
\\.\COM1\
ein
Delphi-Quellcode:
true
zurück (wenn es einen Com-Port COM1 gibt) und ein
Delphi-Quellcode:
\\.\COM5
oder
Delphi-Quellcode:
\\.\COM5\
liefert ein
Delphi-Quellcode:
false
wenn es den Com-Port eben nicht gibt.

Ja, ist das denn nun ein Verzeichnis oder nicht?
Will ich diese Funktion dazu gebrauchen können auf einen Com-Port zu prüfen?

hathor 15. Nov 2014 12:11

AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
 
Zitat:

Zitat von samso (Beitrag 1279877)
Gibt es unter Windows die Möglichkeit ein Directory zu locken?

http://msdn.microsoft.com/en-us/libr...vs.100%29.aspx

CCRDude 17. Nov 2014 10:33

AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
 
Vielen Dank für die zahlreichen Antworten!
Die haben mich auf die richtige Fährte gebracht...

Tatsächlich geht es auf den Rechnern, wo das Problem auftritt, um Netzwerk-Pfade, war mir erst gar nicht bewusst, da es um den "Start Menu\Programs"-Ordner geht.

Habe mir nun entsprechend auch ein Testprogramm geschrieben, dass mir zu diversen Pfaden die Rückgabewerte ausgibt, und damit eure Beschreibung nachvollzogen. Werde den entsprenden Code jetzt umstellen auf FindFirst, damit habe ich das Problem anderswo schonmal in den Griff bekommen (aus anderem Grund umgestellt damals) und dann mittelfristig wohl doch mal auf XE 7 umsteigen.

Sir Rufo 17. Nov 2014 11:15

AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
 
Auch mit XE7 wird das nicht besser.

Einzige Lösung: Schreibe dir eine eigene
Delphi-Quellcode:
DirectoryExists
Funktion, die sich genau so verhält, wie du das erwartest. Und das geht auch ohne
Delphi-Quellcode:
FindFirst
.

Wie du die umsetzt ist egal, solange die genau das macht, was du davon erwartest ;)

CCRDude 17. Nov 2014 11:29

AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
 
Mit XE 7 ist dieses Problem bereits behoben, habe ich ja direkt verglichen.

Wobei ich das Upgrade eher plane, weil diese Diskussion gezeigt hat, dass die RTL doch noch aktualisiert wird, nicht konkret für dieses Problem.

FindFirst war auch nur ein Platzhalter für eine wesenlich komplexere eigene Klasse, die Dateisysteminhalte ausliest und cacht (und nicht nur auf FindFirst, sondern auch Native-Zugriffen basiert und und ...). War nur an dieser Legacy-Code-Stelle noch nicht in Betrieb.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr.
Seite 2 von 3     12 3      

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