Problema nell'aprire in lettura un file zip

di il
23 risposte

23 Risposte - Pagina 2

  • Re: Problema nell'aprire in lettura un file zip

    In effetti l'uso di una string come contenitore di byte non mi ha mai dato problemi. Poiche' lo scopo era cercare le corrispondenze di una stringa all'interno di un file mi e' venuto spontaneo usare tale soluzione dal momento che erano disponibili funzioni come Pos(), Delete() e lowerCase(). Il problema come dicevo nasceva esclusivamente nel creare il TFileStream con file di certe dimensioni e l'errore, come ho potuto constatare, nasceva dalle scarse risorse di memoria del mio PC.

    L'applicazione mi e' utile nel cercare all'interno di file sorgente algoritmi, uso di componenti o pezzi di codice mediante una parola chiave specificata.

    https://www.dropbox.com/scl/fi/vzxxeowbqg7tqhohvb6de/CercaParole.exe?rlkey=aprmzjj8mvnhhd16ukqvbanqv&st=18nhd8td&dl=0

  • Re: Problema nell'aprire in lettura un file zip

    E' un po' bischero aprire un file, portarlo TUTTO in memoria per cercare delle stringhe.

    Non ti serve portarlo TUTTO in memoria: questo e' il caso PEGGIORE di implementazione.

    L'altro caso peggiori si trova dalla parte opposta dell'approccio: leggere un byte alla volta.

    La via di mezzo, leggi blocchi che ne so, da 1MB, oppure 64KB alla volta ed analizzi SOLO quelli (in modo 'intelligente' per gestire i casi in cui una stringa si trova a cavallo tra due blocchi adiacenti).

    In questo modo puoi PROCESSARE non solo GIGABYTE, ma anche TERA/PETA/EXABYTE  :-)

  • Re: Problema nell'aprire in lettura un file zip

    Non posso che concordare... potrebbe essere una modifica che faro' ;-)

  • Re: Problema nell'aprire in lettura un file zip

    Ho effettuato la modifica suggerita da Migliorabile di leggere blocchi piu picccoli di byte. Ho provato con file oltre il Gb, letti piu' volte senza incorrere in alcun problema di memoria. Il codice:

    CountByte:=LUN_BLOCCO;  // Blocchi da 1Mb
    if DimTotale<CountByte then
       CountByte:=DimTotale;
    PrimoBlocco:=True;
    CountTot:=0;
    //
    FStream:=TFileStream.Create(NomeFile,fmOpenRead);
    Try
       repeat
          SetLength(TestoBlocco, CountByte);
          FStream.Read(TestoBlocco[1],CountByte);
          //
          PreparaLeggiBlocco(TestoBlocco,Parola,NomeFile,PrimoBlocco);
          //
          PrimoBlocco:=False;
          CountTot:=CountTot+CountByte;
          Diff:=DimTotale-CountTot;
          if Diff<CountByte then
             CountByte:=Diff;
          ProgressBar2.StepBy(1);
          if ProgressBar2.Position>=100 then
             ProgressBar2.Position:=0;
       until CountTot>=DimTotale;
    Finally
       FreeAndNil(FStream);
       end;
  • Re: Problema nell'aprire in lettura un file zip

    04/03/2026 - franco ha scritto:

    Ho effettuato la modifica suggerita da Migliorabile di leggere blocchi piu picccoli di byte. Ho provato con file oltre il Gb, letti piu' volte senza incorrere in alcun problema di memoria.

    Io però non ho capito: prima parlavi di leggere ZIP, poi parli di ricerca di stringhe.

    Il codice che hai scritto mi sembra eccessivamente complicato, però non è chiaro qual è l'obiettivo che si sta effettivamente perseguendo, dato che siamo di fronte a file di grandezze diverse e di formati diversi (ZIP, testo?)

  • Re: Problema nell'aprire in lettura un file zip

    Anche io non ho capito l'intento...

    Potevi usare shellexecute estrarre i file e leggere la directory il lavoro sporco lo fa il s.o.

    Alla fine (se vuoi solo leggerne il contenuto) elimini il tutto e amen! Pronto per un altro file zip.

    È un unico file compresso o una cartella compressa?

  • Re: Problema nell'aprire in lettura un file zip

    Il mio scopo e' di trovare algoritmi, pezzi di codice, uso di oggetti tra molti file mediante una parola chiave contenuta in essi.

    I file nei quali eseguo la ricerca possono essere tutti quelli di una cartella (volendo anche delle sottocartelle) o posso selezionarli col mouse.

    Alla fine ottengo l'elenco dei file (tipicamente file sorgente) che contengono la parola chiave e posso aprirli col doppio click.

    I file .zip non li decomprimo, li ho solo usati nella ricerca per vedere se il soft. andava in tilt con file di grandi dimensioni.

  • Re: Problema nell'aprire in lettura un file zip

    A parte l'esercizio di programmazione, hai a disposizione l'utility GREP che svolge esattamente la funzione che cerchi (di ricerca).

    ... scusa il gioco di parole ...

  • Re: Problema nell'aprire in lettura un file zip

    Non conoscevo GREP, ma l'esercizio di programmazione mi permette di ottenere delle soddisfazioni piacevoli, specie ora che ho diverso tempo libero.

Devi accedere o registrarti per scrivere nel forum
23 risposte