Newsgroup: it.comp.lang.delphi
Titolo: Monitorare directory - seconda parte.

Sto utilizzando il componente DirMonitor (ringrazio ancora chi me l'ha
consigliato)... ho solo un piccolo problema: non mi serve sapere quando un
file "inizia ad esistere" nella directory, ma quando l'applicazione che lo
sta scrivendo ha terminato di scriverlo e lo chiude, in quanto devo leggere
il file creato, e non posso farlo se non e' completo.
Esiste un metodo per sapere se un file sul disco e' "occupato" e aspettare
che venga chiuso? Sto parlando di files di circa 500/600 kb, quindi anche se
breve, la scrittura sul disco non e' istantanea...
Grazie mille.

 aspettare che venga chiuso?
Sono certo che esistano modi più raffinati (come ad esempio ottenere la
lista di tutti i files aperti da un'applicazione) ma da quello che hai
scritto nel messaggio potresti anche cavartela tentanto di aprire in modo
esclusivo il file. Se ci riesci vuol dire che sei l'unico ad avere accesso a
quel file (= l'applicazione l'ha già chiuso); combinando il tuo monitoraggio
della avvenuta creazione del file con il tentativo di accesso esclusivo
dovresti essere a cavallo.
var
  fSource: TFileStream;
begin
  try
    fSource := TFileStream.Create('c:\testo.txt',
fmOpenRead+fmShareExclusive);
    fSource.Free;
  except on E:EFOpenError do
    ShowMessage('Impossibile accedere al file, è ancora in uso');
  end;
end;
Ps: non metterlo in un ciclo, usa piuttosto un timer...
HTH,
--
Andrea /\/\agni
ICQ#: 174108000

 e' istantanea...
Credo che sia sufficiente usare l'API CreateFile cercando di
aprire il file in maniera esclusiva: se restituisce un errore significa
che il file e' gia' in uso.
Il modo piu' giusto di operare, IMO, dovrebbe pero' essere diverso
(se ti e' possibile): e' l'applicazione che scrive il file che dovrebbe
comunicare in qualche maniera il termine del'operazione.
Ciao.
--
ACSH
[D4]
---------------------------
Chi fa da se'
fatica il doppio

 comunicare in qualche maniera il termine del'operazione.
Certamente se l'altra applicazione fosse mia farei cosi'... purtroppo non lo
e. :-(

 Ps: non metterlo in un ciclo, usa piuttosto un timer...
Cioe'... lo metto in un ciclo con un timer (odio queste cose... perche' non
posso restare "in attesa" semplicemente? Non esiste una funzione di apertura
"bloccante"?)

 Perche' bisogna sempre usare questi "aggiramenti"?
Non cominciamo la solita polemica Win-Linux... sono due mondi diversi.
Ciao :-)


 funzione di apertura "bloccante"?)
Non che io sappia... e cmq fra bloccante e non bloccante io voterei tutta la
vita per il non bloccante...
Ciao


che venga chiuso? 
Questo tipo di monitoraggi mi lascia sempre perplesso.
Puoi descrivere esattamente qual è il problema a monte, che stai
cercando di risolvere ?
-- 
Andrea Laforgia - a.laforgia(at)
libero.it
"There are three kinds of people in this world; 
 those who are good at maths and those who aren't".

 tutta la vita per il non bloccante...
Io preferirei averle entrambe e scegliere quella che mi serve a seconda del
caso...

 cercando di risolvere ?
Ho un fax server che per ogni fax ricevuto scrive un file (TIFF) su disco,
appena il file e' stato scritto devo modificare l'immagine per inserire un
numero, e trascrivere su una tabella di database il numero e il nome del
file.
Il fax server, purtroppo, non l'ho scritto io, e non ho altri strumenti a
disposizione. Nel mondo reale a volte queste cose capitano... :-(

Nel mondo reale a volte queste cose capitano... :-(
"welcome to the real world..."
E' evidente che sei pentito di aver scelto la pillola rossa!
^____^
-- 
Morde. 
(morde at programmer dot net)

[...]Nel mondo reale a volte queste cose capitano... :-(
Perché ? di quale altro mondo si parla qui dentro ?


>  Nel mondo reale a volte queste cose capitano... :-(
A volte..? Magari!!!!!!!!
Acqua