![]() |
Fehler in DirectoryExists und UNC Pfade für XE
Hallo Zusammen,
in XE funktioniert DirectoryExists für UNC Pfade nicht. Es wird immer True zurück gegeben! Der Support empfiehlt 1) eine eigene MySysUtils unit zu erstellen und den Fehler darin zu fixen oder 2) sich XE2 zu kaufen, da ist der Fehler behoben. Beider Lösungen sind nicht akzeptabel. Zu 1: Was ist mit all den Funktionen von in Delphi, die DirectoryExists weiterhin aus SysUtils verwenden. Soll ich die auch gleich alle Fixen? :gruebel: Zu 2: Auch schlecht wir haben erst diese Jahr auf XE umgestellt und nach einem ¾ Jahr wieder alles umstellen? Im Projektgeschäft ist OK; bei einem Produkt das das nicht so leicht möglich. Da sind die Zyklen größer. (so 3 - 6 Jahre für das gesamte FrameWork) Den Code, der vom Support kommt, hab ich mal bereit gestellt. Da kann man sehen, es ist nix aufregendes was das verändert werden muss. Und ich hab mir mal FileExists angeguckt und den gleichen Fehler gefunden… Der Support sagt das er sich weigert den Fehler zu Fixen. Mein Frage: Hat Ihr eine Möglichkeit die RTL150.bpl neu zu erzeugen? oder gibt es einen anderen weg? Gruß Jörg
Code:
function DirectoryExists(const Directory: string; FollowLink: Boolean = True): Boolean;
{$IFDEF MSWINDOWS} var Code: Cardinal; Handle: THandle; LastError: Cardinal; begin Result := False; Code := GetFileAttributes(PChar(Directory)); if Code <> INVALID_FILE_ATTRIBUTES then begin if faSymLink and Code = 0 then Result := faDirectory and Code <> 0 else begin if FollowLink then begin Handle := CreateFile(PChar(Directory), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); if Handle <> INVALID_HANDLE_VALUE then begin CloseHandle(Handle); Result := faDirectory and Code <> 0; end; end else if faDirectory and Code <> 0 then Result := True else begin Handle := CreateFile(PChar(Directory), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); if Handle <> INVALID_HANDLE_VALUE then begin CloseHandle(Handle); Result := False; end else Result := True; end; end; end else begin LastError := GetLastError; Result := (LastError <> ERROR_FILE_NOT_FOUND) and (LastError <> ERROR_PATH_NOT_FOUND) and (LastError <> ERROR_INVALID_NAME) and (LastError <> ERROR_BAD_NETPATH);// <= Die entscheidende Zeile, die fehlte... end; end; {$ENDIF MSWINDOWS} {$IFDEF POSIX} var StatBuf, LStatBuf: _stat; LDirectory: UTF8String; Success: Boolean; begin LDirectory := UTF8Encode(Directory); Success := stat(PAnsiChar(LDirectory), StatBuf) = 0; Result := Success and S_ISDIR(StatBuf.st_mode); if not Result and (lstat(PAnsiChar(LDirectory), LStatBuf) = 0) and S_ISLNK(LStatBuf.st_mode) then begin if Success then Result := S_ISDIR(StatBuf.st_mode) else if not FollowLink then Result := True; end; end; {$ENDIF POSIX} |
AW: Fehler in DirectoryExists und UNC Pfade für XE
Was soll der Blödsinn überhaupt mit der GetLastError Abfrage. Wenn GetFileAttributes INVALID_FILE_ATTRIBUTES liefert, dann existiert das Verzeichnis nicht. Da muss man nicht noch die ErrorCodes abprüfen und mit jeder neuen Windows Version vielleicht den Code anpassen weil es neue ErrorCodes gibt. Wer bei Embt ist denn auf den Unsinn gekommen? Mir leutet er zumindest im Moment nicht ein.
|
AW: Fehler in DirectoryExists und UNC Pfade für XE
Zumal der ErrorCode ja nirgends zurückgegeben wird.
|
AW: Fehler in DirectoryExists und UNC Pfade für XE
Zitat:
Zitat:
|
AW: Fehler in DirectoryExists und UNC Pfade für XE
Zitat:
Und das Überarbeiten von einigen Mio.Zeilen Code nicht auch nicht ohne... Auch die Geschichte mit der relativen nähe von Units hilft da nur begrenzt...
Code:
uses
SysUtils, ActnList,... , TntActnList, TntSysUtils; Zitat:
Da muss wohl der Druck auf einige Endscheider bei Embacadero einwenig erhöht werden :feuerchen: Danke für deine Anregungen! Da sind echt einpaar neue Dinge, die Ich soauch noch nicht wusste.... |
AW: Fehler in DirectoryExists und UNC Pfade für XE
Zitat:
Keine Ahnung wer genau, aber ich sehe nur die Auswirkungen... |
AW: Fehler in DirectoryExists und UNC Pfade für XE
Gut, es mag Fehler geben, welche auf ein Problem hindeuten, aber dann hätte ich maximal noch eine Exception geworfen.
Aber wenn schon auf gewisse Fehler reagieren, dann doch auf diese Fehler prüfen und nicht die Gegenfehler, wie es Emba macht ... dann kommt mal wer und erfindet neue Fehler und :stupid: |
AW: Fehler in DirectoryExists und UNC Pfade für XE
Zitat:
Aber soll ich beim nächsten Zyklus der Produkte auf C# setzten oder was:?: Das da einer bei Emba schlechten Tag hatte als der Code entstanden ist mag sein. Hilft mir auch nicht weiter... |
AW: Fehler in DirectoryExists und UNC Pfade für XE
Zitat:
Diese ersetzt dan Zentrale Funktionen in der RTL mit gefixten Versionen. Im restlichen Programm muss nix geändert werden. |
AW: Fehler in DirectoryExists und UNC Pfade für XE
Zitat:
Wie das Grundsätzlich mit Komponenten funzt ist mir auch klar. Wir haben auch alles abgeleiten und eigene Dinge rein gemacht... Aber wenn einer Vergist MySuperSysUtils einzubinden und dann DirectoryExists aufruft hab ich beim erkennen und suchen des Fehlers keine freude mehr ... :kotz: Dazu ist das Produkt einfach zugroß und zuverteilt... Wir arbeit mit Laufzeit Packages, das sollte erstmal keinen großen unterschied zur EXE machen... Oder hab ich dich wirklich falsch verstanden ??? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz