Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: petrusic - Ottobre 20, 2023, 09:57:47 am

Titolo: uso della funzione FileAgeUTF8
Inserito da: petrusic - Ottobre 20, 2023, 09:57:47 am
Ho provato ad inserire nel mio programma il richiamo della function FileAgeUTF8, interna alla classe FileUtil, ma il compilatore da errore per
"Identificatore NON TROVATO".

Come posso allora richiamarla?
Titolo: Re:uso della funzione FileAgeUTF8
Inserito da: bonmario - Ottobre 20, 2023, 12:49:52 pm
Ciao, da me quella funzione è nella unit "LazFileUtils".

Ciao, Mario
Titolo: Re:uso della funzione FileAgeUTF8
Inserito da: petrusic - Ottobre 20, 2023, 11:25:45 pm
Ciao, da me quella funzione è nella unit "LazFileUtils".

Va bene. L'ho provato ed effettivamente mi da un solo valore, quello corrispondente al programma attivo, l'unico in quel momento.
Ma l'informazione restituita dall'istruzione
Codice: [Seleziona]
procedure TForm1.FormCreate
dataAvvio= "1697576556"
percorso di DomusRatio= "/media/dirdati/dativari/lazarus_progetti/lazarus_progetti_miei/DomusRatio/bin/"
riguarda lo stesso programma che ha richiamato FileAgeUTF8.

Non è però quello che serve a me. Io infatti cerco di capire se oltre a quello in esecuzione, esistono altri programmi attivi con lo stesso nome.

Io pensavo di potere ottenere un risultato simile per proteggermi da eventuali presenze di duplicati dello stesso programma attivo.
 :-\
Titolo: Re:uso della funzione FileAgeUTF8
Inserito da: DragoRosso - Ottobre 20, 2023, 11:49:56 pm
Usa i Mutex, inserisci la variabile come globale e il codice nella prima Create (della tua Form ad esempio):

Codice: [Seleziona]
var Mutex: THandle;
  // Crea un oggetto sincronizzato unico nel sistema operativo (anche tra terminal server)
  hMutex:=CreateMutex(Nil,False, 'Sonogiainesecuzione');   //crea il MUTEX per tutto il sistema operativo
  // Verifica che l'oggetto non sia gia' 'owned' da qualche altro processo (istanza del programma),
  // nel qual caso esce dal programma
  if (WaitForSingleObject(hMutex,0) = wait_TimeOut) then
    exitprocess(255);

Questo impedisce che ci siano più istanze del programma.

Ciao
Titolo: Re:uso della funzione FileAgeUTF8
Inserito da: bonmario - Ottobre 21, 2023, 07:27:51 am

Non è però quello che serve a me. Io infatti cerco di capire se oltre a quello in esecuzione, esistono altri programmi attivi con lo stesso nome.

Io pensavo di potere ottenere un risultato simile per proteggermi da eventuali presenze di duplicati dello stesso programma attivo.
 :-\

FileAgeUtf8, ti da la data/ora di ultima modifica di un file.
Per fare quello che serve a te, oltre a quanto ti è già stato risposto, c'è questo:
https://wiki.freepascal.org/UniqueInstance

Credo che si trovi anche in Online Package Manager.

Ciao, Mario
Titolo: Re:uso della funzione FileAgeUTF8
Inserito da: petrusic - Ottobre 21, 2023, 10:56:41 am
FileAgeUtf8, ti da la data/ora di ultima modifica di un file.
Per fare quello che serve a te, oltre a quanto ti è già stato risposto, c'è questo:
https://wiki.freepascal.org/UniqueInstance
Credo che si trovi anche in Online Package Manager.

C'è sempre pidof, ma ho il problema di come andare a leggere la risposta del comando; penso infatti che dovrei trasferire tale risultato in un file.text da consultare.

La soluzione UniqueInstance potrebbe essere più semplice da gestire a programma, anche se bisogna aggiungere un nuovo componente.
Ho provato la funzione che miu hai suggerito, ma non riesco a farla funzionare. Sicuramente non ho capito come usarla. Ho cercato esempi in menrito, ma non ne ho trovati.
Ho costruiito le 2 prove, la prima senza argomenti, la seconda coi due argomenti spiegati nel documento:
Codice: [Seleziona]
var
  swDoppio: Boolean = False;
. . .

1.a prova:
  swDoppio:= InstanceRunning;
  if swDoppio then
  begin
    Close;
  end;

2.a prova:
  InstanceRunning('/media/dirdati/dativari/contabfam/DomusRatio_bin/DomusRatio.Lazarus', swDoppio);
  if swDoppio then
  begin
    Close;
  end;
FileAgeUtf8, ti da la data/ora di ultima modifica di un file.
Per fare quello che serve a te, oltre a quanto ti è già stato risposto, c'è questo:
https://wiki.freepascal.org/UniqueInstance
Credo che si trovi anche in Online Package Manager.

C'è sempre pidof, ma ho il problema di come andare a leggere la risposta del comando; penso infatti che dovrei trasferire tale risultato in un file.text da consultare.

La soluzione UniqueInstance potrebbe essere più semplice da gestire a programma, anche se bisogna aggiungere un nuovo componente.
Ho provato la funzione che miu hai suggerito, ma non riesco a farla funzionare. Sicuramente non ho capito come usarla. Ho cercato esempi in menrito, ma non ne ho trovati.
Ho costruiito le 2 prove, la prima senza argomenti, la seconda coi due argomenti spiegati nel documento:
Codice: [Seleziona]
var
  swDoppio: Boolean = False;
. . .

1.a prova:
  swDoppio:= InstanceRunning;
  if swDoppio then
  begin
    Close;
  end;

2.a prova:
  InstanceRunning('/media/dirdati/dativari/contabfam/DomusRatio_bin/DomusRatio.Lazarus', swDoppio);
  if swDoppio then
  begin
    Close;
  end;
Nella prima il contenuto di swDoppio NON cambia, la seconda va addirittura in errore