AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Fehler in DirectoryExists und UNC Pfade für XE
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler in DirectoryExists und UNC Pfade für XE

Ein Thema von yörsch · begonnen am 27. Okt 2011 · letzter Beitrag vom 9. Jul 2014
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#1

Fehler in DirectoryExists und UNC Pfade für XE

  Alt 27. Okt 2011, 14:23
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?

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}
Jörg
have FUN
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: Fehler in DirectoryExists und UNC Pfade für XE

  Alt 27. Okt 2011, 19:04
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

AW: Fehler in DirectoryExists und UNC Pfade für XE

  Alt 27. Okt 2011, 19:10
Zumal der ErrorCode ja nirgends zurückgegeben wird.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Fehler in DirectoryExists und UNC Pfade für XE

  Alt 27. Okt 2011, 20:28
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?
Schau dir mal die TNTWar Kompos an. Dort gibt es Funktionen/Proceduren um Systemfunktionen zu überschreiben. Hab ich bei D6 im Einsatz um hier ein paar Fixes in der RTL einzubringen.

Hat Ihr eine Möglichkeit die RTL150.bpl neu zu erzeugen?
oder gibt es einen anderen weg?
Geht nicht. Du musst wenn du Laufzeitpackages verwenden willst deine eigenen Stack von BPL's aufbauen. Bei MS kann ja auch keiner so mal die MFC/ATL patchen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#5

AW: Fehler in DirectoryExists und UNC Pfade für XE

  Alt 28. Okt 2011, 10:45
Schau dir mal die TNTWar Kompos an.
Eine alternative... wenn ich allein währe, aber wie konntrolliere ich über 30 Entwickler an mehren Standorten?
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;
Geht nicht. Du musst wenn du Laufzeitpackages verwenden willst deine eigenen Stack von BPL's aufbauen. Bei MS kann ja auch keiner so mal die MFC/ATL patchen.
Das ist nachvollziehbar, wie ich mir schon dachte...
Da muss wohl der Druck auf einige Endscheider bei Embacadero einwenig erhöht werden

Danke für deine Anregungen!
Da sind echt einpaar neue Dinge, die Ich soauch noch nicht wusste....
Jörg
have FUN
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#6

AW: Fehler in DirectoryExists und UNC Pfade für XE

  Alt 28. Okt 2011, 10:53
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.
Das war, wie schon gesagt, der Support.
Keine Ahnung wer genau, aber ich sehe nur die Auswirkungen...
Jörg
have FUN
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#7

AW: Fehler in DirectoryExists und UNC Pfade für XE

  Alt 28. Okt 2011, 10:54
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#8

AW: Fehler in DirectoryExists und UNC Pfade für XE

  Alt 28. Okt 2011, 11:10
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
himitsu, da bin ich deiner Meinung! Und versuche so meine eigenen Fehlerchen in den Griff zubekommen...
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...
Jörg
have FUN
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Fehler in DirectoryExists und UNC Pfade für XE

  Alt 28. Okt 2011, 11:25
Schau dir mal die TNTWar Kompos an.
Eine alternative... wenn ich allein währe, aber wie konntrolliere ich über 30 Entwickler an mehren Standorten?
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...
Du hast mich mißverstanden. Du musst nur an einer Zentralen stelle für das aufruf einer "FixDxx"-Funktion sorgen.
Diese ersetzt dan Zentrale Funktionen in der RTL mit gefixten Versionen. Im restlichen Programm muss nix geändert werden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#10

AW: Fehler in DirectoryExists und UNC Pfade für XE

  Alt 28. Okt 2011, 12:01
Du hast mich mißverstanden. Du musst nur an einer Zentralen stelle für das aufruf einer "FixDxx"-Funktion sorgen. Diese ersetzt dan Zentrale Funktionen in der RTL mit gefixten Versionen. Im restlichen Programm muss nix geändert werden.
Hab ich da was überlesen??? Wo wird den das in TNTWar gemacht? Wo wird SysUtils überschrieben ?

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 ...
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 ???
Jörg
have FUN
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 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