![]() |
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 |
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. ![]() Nutzt du WinRAR zum entpacken? |
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:
PS: so klappt auch mit dem Nachbarn:
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;
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; |
Re: FileExists und 2003 Server
Zitat:
|
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