23/02/2026 - franco ha scritto:
L'errore avviene nel FileStream:=TFileStream.Create(NomeFile, fmOpenRead); quando i file superano all'incirca il Gb (sempre sotto i 2Gb)
E' possibile che la problematica sia legata al fatto che la dimensione del file necessiti di un Longint (64 bit) invece che un 32 bit quale è il tipo Integer di Delphi 6, o che l'API importata da Windows in una versione di Delphi così vecchia non corrisponda con l'esatta firma del metodo che ci si aspetta in Windows 7, che è anch'esso piuttosto vecchio.
Mi chiedo perché usare una versione così vecchia di Delphi su una versione così vecchia di Windows e con una RAM abbastanza limitata. :|
23/02/2026 - Delphinium ha scritto:
E' molto probabile che con file così grandi tu non abbia le risorse necessarie per gestirlo
Dipende anche da come viene gestito. Con un TFileStream puoi leggere ed elaborare un file anche molto grande, di svariati GB, leggendo/scrivendo un byte alla volta, prescindendo dal quantitativo di RAM che hai a disposizione.
Per intenderci, con il codice di Franco
23/02/2026 - franco ha scritto:
n:=FileStream.Size; if (n=0) then exit; st:=''; SetLength(st,n); FileStream.Read(st[1],n); // Copia lo stream nella stringa st
il rischio è di non riuscire a elaborare anche file più piccoli di quelli incriminati, visto che fondamentalmente si va a caricare tutto il file in memoria, che è totalmente inefficiente (a quel punto non ha nemmeno senso usare un FileStream).
23/02/2026 - franco ha scritto:
probabilmente e' una questione di risorse di memoria
Probabilmente è qualcos'altro, ma con il codice che hai scritto diventerebbe anche una questione di memoria, ma non per la sua scarsità quanto per il modo in cui viene utilizzata, anche se nel caso in esame - posto che realmente l'errore che riporti si scateni esattamente sulla TFileStream.Create() - la causa probabilmente è legata a limitazioni di bitness e dell'API di Windows importata (parliamo di una versione di Delphi che ha 25 anni).