![]() |
Delphi-Version: 7
Files grösser 2 bzw. 4Gig mit FindFirst
Hi,
ich wollte mal eben schnell eine platte einlesen. Naja, "mal so eben" ist ja meistens eh nicht. Und so ist es auch. TSearchRec Hat für die Size nur ein Integer. Wie kann man mit FindFirst, FindNext directorys einlesen OHNE den fehler mit der Bereichsprüfung zu bekommen, und die richtige Grösse zurück zu bekommen? Gibt es was neues? In google, bzw. Boardsuche habe ich leider nix gefunden. Danke im voraus |
AW: Files grösser 2 bzw. 4Gig mit FindFirst
FindFirstFileEx liefert die Size als nFileSizeLow und nFileSizeHigh. Schätze, das ist, was Du brauchst.
|
AW: Files grösser 2 bzw. 4Gig mit FindFirst
Danke dir. Das wird es sein. Passt zwar überhauptnicht in mein "geschriebsel", aber da muss man wohl durch. Ich dachte es gibt so eine art erweiterten TSearchRec und ich kann alles behalten.
Nochmal... thx |
AW: Files grösser 2 bzw. 4Gig mit FindFirst
Ich nochmal... Ich werde dir das "klauen"
![]() Keine angst, ist nur für mich privat... [mal einen bettelversuch starten] Das "komplette" kannst du nicht posten, oder? Also quasi als Procedure wo man mit Pfad reinspringt und er ein TStrings füllt. z.b. so GetAllFiles('C:\','*.doc',Filelist); [/mal einen bettelversuch starten] |
AW: Files grösser 2 bzw. 4Gig mit FindFirst
Unter Windows gibt es doch im Record TSearchRec das Record FindData vom Typ TWin32FindDataA bzw. TWin32FindDataW Dort gibt es die Cardinals nFileSizeHigh und nFileSizeLow. D.h. statt TSearchRec.Size wertet man halt einfach TSearchRec.FindData.nFileSizeHigh und TSearchRec.FindData.nFileSizeLow aus.
|
AW: Files grösser 2 bzw. 4Gig mit FindFirst
Seit D2006? sollte TSearchRec für Size auf Int64 stehen.
Aber wie schon erwähnt, kann man sich auch über SearchRec.FindData dir Daten der intern genutzten WinAPI ![]() |
AW: Files grösser 2 bzw. 4Gig mit FindFirst
Stimmt eigentlich! Hier in D2010 / SysUtils.pas steht:
Delphi-Quellcode:
und in windows.pas geht's weiter mit
TSearchRec = record
Time: Integer; Size: Int64; Attr: Integer; Name: TFileName; ExcludeAttr: Integer; {$IFDEF MSWINDOWS} FindHandle: THandle platform; FindData: TWin32FindData platform; {$ENDIF MSWINDOWS} {$IFDEF POSIX} Mode: mode_t platform; FindHandle: Pointer platform; PathOnly: String platform; Pattern: String platform; {$ENDIF POSIX} end;
Delphi-Quellcode:
Damit sollte alles funktionieren.
_WIN32_FIND_DATAW = record
dwFileAttributes: DWORD; ftCreationTime: TFileTime; ftLastAccessTime: TFileTime; ftLastWriteTime: TFileTime; nFileSizeHigh: DWORD; nFileSizeLow: DWORD; dwReserved0: DWORD; dwReserved1: DWORD; cFileName: array[0..MAX_PATH - 1] of WideChar; cAlternateFileName: array[0..13] of WideChar; end; |
AW: Files grösser 2 bzw. 4Gig mit FindFirst
Und cAlternateFileName ist der 8.3-Dateiname, falls den unbedingt wer braucht.
Blos ftLastAccessTime funktioniert seit Win7 nicht immer, da die im NTFS dieses teilweise abgeschaltet haben um einige Schreibzyklen einzusparen. |
AW: Files grösser 2 bzw. 4Gig mit FindFirst
Danke euch für eure hilfe.
Ich habe mir im moment (gestern abend am laptop) erstmal so geholfen das der "Fehler" ignoriert wird. Da ich im moment nur nach mp3´s suche ist es erstmal wurscht. Sollte ich ein sooooooo grosses mp3 finden, werde ich es posten :-D Thx @all |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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