Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   RtlVclOptimize 2.77 - DelphiSpeedUp Code im eigenen Programm (https://www.delphipraxis.net/91692-rtlvcloptimize-2-77-delphispeedup-code-im-eigenen-programm.html)

jbg 3. Okt 2007 13:06

Re: RtlVclOptimize 2.7 - DelphiSpeedUp Code im eigenen Progr
 
Zitat:

Zitat von marc_ki
Die Fastfileexists hat einen kleinen schönheitsfehler im vergleich zum original. Das original nimmt auch wildcards, die optimierte variante scheinbar nicht...

Dann rate ich dir mal ganz schnell davon ab, diese nicht dokumentierte Funktionalität von FileExists zu nutzen. Denn ab Delphi 2006 ist FileExists genau so implementiert wie FastFileExists.

jbg 3. Okt 2007 13:10

Re: RtlVclOptimize 2.7 - DelphiSpeedUp Code im eigenen Progr
 
Ach ja und ab Delphi 2007 funktioniert diese undokumentierte Funktionalität auch nicht mehr mit FileAge().

bigg 3. Okt 2007 13:39

Re: RtlVclOptimize 2.7 - DelphiSpeedUp Code im eigenen Progr
 
moin,

ich habe noch eine Kleinigkeit gefunden:
Die Funktion FastFileExists() findet die Auslagerungsdatei "pagefile.sys" nicht.

Ist das bei D2005-D2007 auch der Fall? :gruebel:

Testsystem: XPSP2, Delphi 7 PE




Gruß Stefan

jbg 3. Okt 2007 13:52

Re: RtlVclOptimize 2.7 - DelphiSpeedUp Code im eigenen Progr
 
Zitat:

Zitat von bigg
Ist das bei D2005-D2007 auch der Fall? :gruebel:

Ja, da hast du wohl voll ins Schwarze getroffen (wer prüft denn schon auf die Existenz der Auslagerungsdatei).

Delphi-Quellcode:
function FileExists(const Filename: string): Boolean;
var
  Code: Integer;
begin
  Code := Integer(GetFileAttributes(PChar(FileName)));
  if Code <> -1 then
    Result := (FILE_ATTRIBUTE_DIRECTORY and Code = 0)
  else
    Result := GetLastError = ERROR_SHARING_VIOLATION;
end;
Da werde ich gleich mal einen QualityCentral Report aufmachen.

bigg 3. Okt 2007 14:08

Re: RtlVclOptimize 2.7 - DelphiSpeedUp Code im eigenen Progr
 
Zitat:

Zitat von jbg
Ja, da hast du wohl voll ins Schwarze getroffen (wer prüft denn schon auf die Existenz der Auslagerungsdatei).

Vermutlich nur ich? :nerd: :cheers:
Du hast den Fehler ja schon behoben?!. Das ging flott.

ps: Die abgewandelten Listen sehen auch sehr schmackhaft aus, die werde ich mir auch noch vorknöpfen.


Gruß Stefan

jbg 3. Okt 2007 14:15

Re: RtlVclOptimize 2.7 - DelphiSpeedUp Code im eigenen Progr
 
http://qc.codegear.com/wc/qcmain.aspx?d=52905

bigg 3. Okt 2007 14:34

Re: RtlVclOptimize 2.7 - DelphiSpeedUp Code im eigenen Progr
 
Das WorkArround funktioniert bei mir nicht. Die Funktion Windows.GetLastError liefert bei mir den Wert 5 "Zugriff verweigert", wenn ich die "pagefile.sys" auf Existenz überprüfe.

So geht's:

Delphi-Quellcode:
function MyFileExists(const Filename: string): Boolean;
var
  Code: Integer;
  LastError: Integer;
begin
  Code := Integer(Windows.GetFileAttributes(PChar(FileName)));
  if Code <> -1 then
    Result := (FILE_ATTRIBUTE_DIRECTORY and Code = 0)
  else
  begin
    LastError := Windows.GetLastError;
    Result   := (LastError = ERROR_ACCESS_DENIED);
  end;
end;

Gruß Stefan

mirage228 3. Okt 2007 14:38

Re: RtlVclOptimize 2.7 - DelphiSpeedUp Code im eigenen Progr
 
Hi,

Ich erhalte für die pagefile.sys ERROR_SHARING_VIOLATION (und nicht ERROR_ACCESS_DENIED)... :gruebel:

mfG
mirage228

bigg 3. Okt 2007 14:40

Re: RtlVclOptimize 2.7 - DelphiSpeedUp Code im eigenen Progr
 
Dann verknüpfen wir das ganze mit or? :P

Delphi-Quellcode:
function MyFileExists(const Filename: string): Boolean;
var
  Code: Integer;
  LastError: Integer;
begin
  Code := Integer(Windows.GetFileAttributes(PChar(FileName)));
  if Code <> -1 then
    Result := (FILE_ATTRIBUTE_DIRECTORY and Code = 0)
  else
  begin
    LastError := Windows.GetLastError;
    Result   := (LastError = ERROR_ACCESS_DENIED) or (LastError = ERROR_SHARING_VIOLATION);
  end;
end;
ps: Bin mit Adminrechten unterwegs, WinXP SP2 und D7PE.


Gruß Stefan

mirage228 3. Okt 2007 14:41

Re: RtlVclOptimize 2.7 - DelphiSpeedUp Code im eigenen Progr
 
Zitat:

Zitat von bigg
Dann verknüpfen wir das ganze mit or? :P

Wäre ne Idee :mrgreen: - Es sei denn es gibt noch mehr Fehler die GetLastError in dem Fall liefern könnte...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:33 Uhr.
Seite 3 von 5     123 45      

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 by Thomas Breitkreuz