Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Files grösser 2 bzw. 4Gig mit FindFirst (https://www.delphipraxis.net/161421-files-groesser-2-bzw-4gig-mit-findfirst.html)

DelTurbo 3. Jul 2011 15:16

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

ConnorMcLeod 3. Jul 2011 15:20

AW: Files grösser 2 bzw. 4Gig mit FindFirst
 
FindFirstFileEx liefert die Size als nFileSizeLow und nFileSizeHigh. Schätze, das ist, was Du brauchst.

DelTurbo 3. Jul 2011 15:40

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

DelTurbo 3. Jul 2011 16:03

AW: Files grösser 2 bzw. 4Gig mit FindFirst
 
Ich nochmal... Ich werde dir das "klauen" http://www.delphipraxis.net/1109721-post9.html

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]

samso 3. Jul 2011 16:21

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.

himitsu 3. Jul 2011 16:38

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 MSDN-Library durchsuchenFindFirstFile ansehen.

ConnorMcLeod 3. Jul 2011 17:23

AW: Files grösser 2 bzw. 4Gig mit FindFirst
 
Stimmt eigentlich! Hier in D2010 / SysUtils.pas steht:
Delphi-Quellcode:
  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;
und in windows.pas geht's weiter mit

Delphi-Quellcode:
  _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;
Damit sollte alles funktionieren.

himitsu 3. Jul 2011 18:27

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.

DelTurbo 4. Jul 2011 10:35

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 02:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz