AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
|
AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
Zitat:
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) |
AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
Zitat:
|
AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
Zitat:
Zitat:
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. |
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?
|
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:
und ich habe dort aber keine Berechtigung, dann liefert jede Abfrage
Server
Delphi-Quellcode:
ganz stumpf ein
DirectoryExists( '\\Server\KomischesVerzeichnisDasEsAuchEhNichtGibt\' )
Delphi-Quellcode:
zurück.
true
Insgesamt muss man den hier auch den Kontext betrachten. So liefert auch eine Abfrage auf
Delphi-Quellcode:
oder
\\.\COM1
Delphi-Quellcode:
ein
\\.\COM1\
Delphi-Quellcode:
zurück (wenn es einen Com-Port COM1 gibt) und ein
true
Delphi-Quellcode:
oder
\\.\COM5
Delphi-Quellcode:
liefert ein
\\.\COM5\
Delphi-Quellcode:
wenn es den Com-Port eben nicht gibt.
false
Ja, ist das denn nun ein Verzeichnis oder nicht? Will ich diese Funktion dazu gebrauchen können auf einen Com-Port zu prüfen? |
AW: Fehleranfääliges DirectoryExists auch in Delphi > XE 1?
Zitat:
|
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. |
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:
Funktion, die sich genau so verhält, wie du das erwartest. Und das geht auch ohne
DirectoryExists
Delphi-Quellcode:
.
FindFirst
Wie du die umsetzt ist egal, solange die genau das macht, was du davon erwartest ;) |
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. |
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