![]() |
Wie arbeitet FileExists intern?
Hallo
Ich habe ein Problem mit der FileExists Funktion. Kann mir eventuell jemand sagen, wie diese Funktion intern arbeitet bzw. welche Api's dazu benutzt werden? Danke schonmal im vorraus. Gruß Richard |
Re: Wie arbeitet FileExists intern?
Hallo,
die Funktion versucht einfach, mittels der Funktion 'GetFileAttributes' die Dateiattribute der im Paramteter übergebenen Datei abzufragen. Je nach Rückgabewert ist das Ergebnis von FileExists True oder False. |
Re: Wie arbeitet FileExists intern?
Delphi 5:
Delphi-Quellcode:
function FileAge(const FileName: string): Integer;
var Handle: THandle; FindData: TWin32FindData; LocalFileTime: TFileTime; begin Handle := FindFirstFile(PChar(FileName), FindData); if Handle <> INVALID_HANDLE_VALUE then begin Windows.FindClose(Handle); if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then begin FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime); if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi, LongRec(Result).Lo) then Exit; end; end; Result := -1; end; function FileExists(const FileName: string): Boolean; begin Result := FileAge(FileName) <> -1; end; |
Re: Wie arbeitet FileExists intern?
Hui, wie sich das doch ändern kann :?
Meine Version bezieht sich auf D2006. |
Re: Wie arbeitet FileExists intern?
Wie die Funktion intern abläuft, ist ja eigenzlich egal.
Hauptsache, das Ergebnis ist gleich. Bei Delphi 2007 sieht's so aus:
Delphi-Quellcode:
function FileExists(const FileName: string): Boolean;
var Code: Integer; begin Code := GetFileAttributes(PChar(FileName)); Result := (Code <> -1) and (FILE_ATTRIBUTE_DIRECTORY and Code = 0); end; |
Re: Wie arbeitet FileExists intern?
Zitat:
Und da macht es dann ja schon Sinn, Unterschiede zwischen den einzelnen Versionen aufzuzeigen. |
Re: Wie arbeitet FileExists intern?
Übrigens ist es bei Delphi7 noch genauso wie bei Delphi 5.
|
Re: Wie arbeitet FileExists intern?
hat das problem mit entpackten dateien zu tun?
ich habe folgendes problem festgestellt: archive mit 7-zip erstellt im zip format archiv mit rar entpackt die entpackten verzeichnisse und dateien konnten nicht mit fileexists gefunden werden. |
Re: Wie arbeitet FileExists intern?
Hi
Ich habe das Problem, das FileExists immer das selbe Ergebnis liefert, egal ob die Datei nun vorhanden ist oder nicht. Gruß Richard |
Re: Wie arbeitet FileExists intern?
Zitat:
Und dass deshalb immer False geliefert wird? Zeig doch mal ein Stückchen Code... |
Re: Wie arbeitet FileExists intern?
Hallo,
prüfst Du mit
Delphi-Quellcode:
oder mit
if FileExists('...') then
[...] end;
Delphi-Quellcode:
Desweiteren wöre es nett, zu wissen, ob das Ergebnis 'False' oder 'True' ist.
if FileExists('...') = True then
[...] end; |
Re: Wie arbeitet FileExists intern?
@S-off
ich benutze erstere Methode. Das Ergebnis ist immer "true". Pfadangaben sind alle korrekt. Gruß Richard |
Re: Wie arbeitet FileExists intern?
Wie schon geschrieben:
Zeig es uns. |
Re: Wie arbeitet FileExists intern?
Hi Raven
Sache ist geklärt. FileExists macht das was es soll. Manchmal hatt man halt Tomaten auf den Augen. ;) Trotzdem Danke an alle. Gruß Richard |
Re: Wie arbeitet FileExists intern?
Ja und?
An was hat's gelegen? Bitte auch immer die (selbst gefundene) Lösung posten, damit andere daraus lernen können... |
Re: Wie arbeitet FileExists intern?
Moin Richard,
Zitat:
Da Du eine Enterprise Version hast, könntest Du Dir solche Fragen ggf. schon dadurch beantworten, dass Du die fragliche Funktion einfach mal mit gedrückter STRG-Taste anklickst. Dann sollte sich die passende Unit öffnen, und das an der Stelle, an der die Funktion implementiert ist. Ab der Pro-Version sind ja die Sourcen mit dabei. |
Re: Wie arbeitet FileExists intern?
Nachtrag:
Die FileExists() Funktion versagt unter Delphi 5-7, da unter gewissen Umständen die Funktion FileAge() versagt. FileAge() versagt, wenn eine Datei kein gültiges Datum hat. Das sollte eigentlich nie passieren; kann aber vorkommen. Dies hängt aber auch mit dem unterliegenden Filesystem zusammen. Wenn z.B. ein IBM AS400 eine NETBIOS Freigabe anbietet, kann es passieren, das FileExists() False meldet, obwohl die Datei definitiv vorhanden ist. (weil das Datum "kaputt" ist) In Beitrag #5 steht dann der Workaround. |
Re: Wie arbeitet FileExists intern?
@ Christian Seehase
Danke dir vielmals du, das ist ein toller Tip. Hab ich gar nicht gewusst das es sowas gibt. @ Raven Hatte bei einer mehrbedingungs If-Abfrage die Klammern falsch gesetzt. Deshalb war das Ergebnis der Funktion am Ende immer "true". mfG Richard |
Re: Wie arbeitet FileExists intern?
Zitat:
|
Re: Wie arbeitet FileExists intern?
Hallo Christian Seehase,
Dein Tipp mit der gedrückter STRG - Taste anklicken und die passende Unit wird geöffnet, ist wirklich sehr hilfreich! Sollte vielleicht mit in die Standard –Tastaturvorlage aufgenommen werden! Gibt’s da noch mehr, was man wissen sollte? Bis bald Chemiker |
Re: Wie arbeitet FileExists intern?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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