Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi FileExists und 2003 Server (https://www.delphipraxis.net/76489-fileexists-und-2003-server.html)

ascotlx 5. Sep 2006 13:31


FileExists und 2003 Server
 
Moin ...,

ich bin da gerade über eine Merkwürdigkeit gestolpert.
Ich bekomme eine gezippte Datei über das Internet, welche ich in ein beliebiges Verzeichnis kopiere.
Nun gehe ich über das File-Kontexmenue und sage "alle extrahieren...", worauf mir ein Verzeichnis mit
dem Namen des Zip-Archivs (ohne Suffix) erstellt wird und die entpackte Datei (es ist nur eine) dort
abgelegt wird. Nun kopiere ich die Datei ändere den Dateinamen und überprüfe die Existenz der Datei mittels
FileExists ... und siehe da die Datei ist nicht vorhanden (obwohl sie im Explorer zu sehen ist). Auch über die Commandline ist die Datei mittels dir sichtbar.
Weitere Versuche die Datei, via FileExists, sichtbar zu machen schlagen fehl (umkopieren bringt nichts, abfragen des UNC-Pfades/Datei bringt nichts, gemapptes Laufwerk/Datei bringt nichts).

Nun öffne ich die Datei und speichere sie nochmal ... und siehe da FileExists funktioniert wieder.
Auch wenn das Zip-Archiv per Doppelklick geöffnet wird und die Datei per Drag-Drop in ein Verzeichnis gezogen wird
funktioniert der FileExists ...

Woran macht der FileExists klar, dass die Datei existiert ?? Die einzige Möglichkeit die mir dazu
einfällt ist, dass der Extract von Windows 2003 Server bei dem "alle extrahieren" die I-Node (sorry, alter Unixer - wie sagt man bei NTFS5 ??) nicht schreibt .. weiss jemand, ob es einen Patch gibt ?

gruss
ascotlx

P.S.: ich benutze D7 Enterprise

generic 5. Sep 2006 16:39

Re: FileExists und 2003 Server
 
ich habe eine solche Merkwürdigkeit in Verbindung mit WinRar erlebt.
Wenn Zipdateien (bei mir mit 7-Zip erstellt) mit WinRar entpackt werden gibt es diese Probleme.
http://www.daddel-mania.de/faq.shtml

Nutzt du WinRAR zum entpacken?

shmia 5. Sep 2006 17:20

Re: FileExists und 2003 Server
 
FileExists verwendet intern FileAge!
Wenn deine Datei also kein "gescheites" Datum hat, existiert sie für die VCL nicht.
Interessant, was da manchmal so entdeckt wird.
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;
PS: so klappt auch mit dem Nachbarn:
Delphi-Quellcode:
function FileExists(const FileName: string): Boolean;
var
  Attr: Cardinal;
begin
  Attr := GetFileAttributes(Pointer(Filename));
  Result := (Attr <> $FFFFFFFF) and (Attr and FILE_ATTRIBUTE_DIRECTORY = 0);
end;

jbg 5. Sep 2006 18:29

Re: FileExists und 2003 Server
 
Zitat:

Zitat von shmia
PS: so klappt auch mit dem Nachbarn:
Delphi-Quellcode:
function FileExists(const FileName: string): Boolean;
var
  Attr: Cardinal;
begin
  Attr := GetFileAttributes(Pointer(Filename));
  Result := (Attr <> $FFFFFFFF) and (Attr and FILE_ATTRIBUTE_DIRECTORY = 0);
end;

Und das ist auch noch um einiges schneller als die Delphi 1-2005 Implementierung von FileExists. (BDS 2006 nutzt auch GetFileAttributes).

ascotlx 6. Sep 2006 10:42

Re: FileExists und 2003 Server
 
moin Andreas, moin
super .. danke für die Antwort. Es stimmt, es ist mir absolut nicht
aufgefallen, dass die Datei überhaupt keinen Zeitstempel besitzt.
Kein Erstellungsdatum .. nix, außer die Datei wird per Drag&Drop
aus dem Archiv gezogen.

Besten Dank...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 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 by Thomas Breitkreuz