programmazione
backup Realizzare un sistema di backup automatico in Pascal è più semplice di quanto possa sembrare. Con poche funzioni offerte da Free Pascal e Lazarus è possibile creare copie di sicurezza affidabili, organizzate e completamente automatiche.
         home page  
 

Backup automatico dei dati con un programma Pascal

Pubblicato il: 5-7-2026

Ultima Modifica: 5-7-2026

💾 Backup automatico dei dati con un programma Pascal

Introduzione

Uno degli aspetti più importanti nello sviluppo di qualsiasi applicazione è la protezione dei dati. Un errore dell'utente, un guasto del disco rigido o un'interruzione improvvisa dell'alimentazione possono provocare la perdita di informazioni preziose.

Per questo motivo è buona pratica implementare una funzione di backup automatico, che consenta di creare copie di sicurezza dei dati senza richiedere l'intervento dell'utente.

In questo articolo vedremo come realizzare un semplice sistema di backup utilizzando il linguaggio Pascal (Free Pascal/Lazarus), imparando a:

  • 📁 copiare file automaticamente;

  • 📅 creare backup con data e ora;

  • 📂 organizzare le cartelle di backup;

  • 🗑️ eliminare automaticamente i backup più vecchi;

  • ⚙️ automatizzare completamente il processo.


Perché creare backup automatici?

Molti programmi salvano dati importanti:

  • database;

  • file di configurazione;

  • documenti;

  • immagini;

  • archivi;

  • registri delle attività.

Se questi file vengono danneggiati o cancellati accidentalmente, recuperarli potrebbe essere impossibile.

Un backup automatico permette di avere sempre una copia aggiornata.

I vantaggi sono numerosi:

✔ protezione dai guasti

✔ recupero rapido

✔ maggiore affidabilità del software

✔ maggiore sicurezza per l'utente


Come funziona un backup

L'idea è molto semplice.

Il programma:

Dati originali
        │
        ▼
Copia automatica
        │
        ▼
Cartella Backup

Ogni volta che il programma viene avviato (oppure chiuso), viene creata una copia dei file importanti.


Creare la cartella dei backup

Prima di copiare i file bisogna verificare che la cartella esista.

Con Lazarus possiamo utilizzare il modulo:

 
uses
  SysUtils;

Creazione della cartella:

 
if not DirectoryExists('Backup') then
  CreateDir('Backup');

Se la cartella è già presente, non accade nulla.


Copiare un file

La funzione più semplice è utilizzare CopyFile.

Per Lazarus:

 
uses
  FileUtil;

Esempio:

 
CopyFile(
    'clienti.dat',
    'Backup\clienti.dat');

Il file verrà copiato integralmente.


Creare backup con data e ora

📅 È preferibile non sovrascrivere il backup precedente.

Possiamo creare un nome diverso ogni volta.

Esempio:

clienti_20260705_153000.dat

Creazione del nome:

 
uses
  SysUtils;

var
  NomeBackup : String;

NomeBackup :=
'Backup\clienti_' +
FormatDateTime('yyyymmdd_hhnnss', Now) +
'.dat';

Il risultato potrebbe essere:

Backup\clienti_20260705_154321.dat

Ogni backup sarà unico.


Copiare il file con nome automatico

 
CopyFile(
    'clienti.dat',
    NomeBackup);

Con poche righe otteniamo uno storico completo dei backup.


Salvare più file

Molti programmi gestiscono diversi archivi.

Ad esempio:

clienti.dat

fornitori.dat

ordini.dat

config.ini

Possiamo copiarli tutti.

 
CopyFile('clienti.dat',
         'Backup\clienti.dat');

CopyFile('fornitori.dat',
         'Backup\fornitori.dat');

CopyFile('ordini.dat',
         'Backup\ordini.dat');

CopyFile('config.ini',
         'Backup\config.ini');

Automatizzare con una procedura

Una soluzione più elegante consiste nel creare una procedura.

 
procedure BackupFile(FileOrigine: String);
var
  NomeDestinazione : String;
begin

  NomeDestinazione :=
    'Backup\' +
    ChangeFileExt(
      ExtractFileName(FileOrigine),
      '') + '_' +
    FormatDateTime('yyyymmdd_hhnnss', Now) +
    ExtractFileExt(FileOrigine);

  CopyFile(FileOrigine,
           NomeDestinazione);

end;

Utilizzo:

BackupFile('clienti.dat');

BackupFile('ordini.dat');

BackupFile('config.ini');

Il codice è molto più riutilizzabile.


📂 Creare una cartella per ogni giorno

Molti programmi professionali organizzano i backup in cartelle.

Esempio:

Backup

   ├── 2026-07-05
   │      clienti.dat
   │      ordini.dat
   │
   ├── 2026-07-06
   │      clienti.dat
   │
   └── 2026-07-07

Creazione:

 
Cartella :=
'Backup\' +
FormatDateTime('yyyy-mm-dd', Now);

if not DirectoryExists(Cartella) then
    CreateDir(Cartella);

Backup automatico all'avvio del programma

Molti software eseguono il backup appena vengono aperti.

Schema:

Avvio programma

      │

Backup dati

      │

Caricamento database

      │

Lavoro dell'utente

In questo modo si conserva sempre una copia dei dati precedenti.


Backup automatico alla chiusura

Un'altra possibilità consiste nel salvare tutto quando il programma termina.

Schema:

Utente chiude il programma

        │

Salvataggio dati

        │

Creazione backup

        │

Chiusura

È una soluzione molto diffusa nei programmi gestionali.


Backup periodico con Timer

⏰ Lazarus mette a disposizione il componente TTimer.

Possiamo decidere di creare un backup ogni ora.

Ogni 60 minuti

        │

Backup automatico

Esempio:

 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
    BackupFile('clienti.dat');
end;

Il timer può essere impostato, ad esempio, a 3.600.000 millisecondi (1 ora).


Conservare solo gli ultimi backup

Se il programma crea una copia ogni giorno, dopo qualche mese potrebbero accumularsi centinaia di file.

Una buona soluzione consiste nell'eliminare automaticamente quelli più vecchi.

Ad esempio:

Conserva:

ultimi 30 backup

oppure

ultimi 60 giorni

Questo evita di occupare inutilmente spazio sul disco.


Comprimere i backup

📦 I backup possono essere compressi in formato ZIP.

I vantaggi:

  • occupano meno spazio;

  • sono più facili da trasferire;

  • possono contenere numerosi file.

In Lazarus esistono librerie dedicate alla creazione di archivi ZIP.


Mostrare l'avanzamento del backup

Se i file sono molto grandi, l'utente apprezza una barra di avanzamento.

Backup in corso...

██████████████░░░░░░

70%

Questo rende il programma più professionale.


Gestione degli errori

Ogni operazione di backup dovrebbe essere protetta.

Ad esempio:

 
try
    BackupFile('clienti.dat');
except
    on E: Exception do
      ShowMessage(E.Message);
end;

In questo modo il programma non terminerà in modo anomalo se qualcosa va storto.


Dove salvare i backup?

Le destinazioni più comuni sono:

  • 💽 un secondo disco;

  • 💾 un SSD esterno;

  • 🌐 una cartella condivisa in rete;

  • ☁️ un servizio cloud sincronizzato (ad esempio una cartella locale collegata al cloud);

  • 🖥️ un NAS.

Salvare i backup sullo stesso disco dei dati originali protegge solo da errori accidentali, ma non da un guasto del disco. Quando possibile, è preferibile utilizzare un dispositivo diverso.


Miglioramenti possibili

Un programma di backup può essere arricchito con molte funzionalità:

  • 🔒 cifratura dei file;

  • 📅 backup incrementale;

  • 📦 compressione ZIP;

  • ☁️ copia sul cloud;

  • 📊 registro delle operazioni effettuate;

  • 📧 invio di notifiche in caso di errore;

  • 🔁 verifica dell'integrità dei file copiati.


Conclusione

Realizzare un sistema di backup automatico in Pascal è più semplice di quanto possa sembrare. Con poche funzioni offerte da Free Pascal e Lazarus è possibile creare copie di sicurezza affidabili, organizzate e completamente automatiche.

Anche un'applicazione di piccole dimensioni trae grande beneficio da questa funzionalità: protegge il lavoro dell'utente, aumenta l'affidabilità del software e riduce il rischio di perdita dei dati.

Investire qualche ora nella realizzazione di un buon sistema di backup significa rendere il proprio programma molto più sicuro e professionale, offrendo agli utenti una tranquillità che sarà apprezzata ogni giorno.