Newsgroup: it.comp.lang.delphi
Titolo: File in uso

Ciao a tutti,
dunque... ho la necessita' di monitorare un file ed eseguire alcune 
operazioni quando esso e' "sbloccato".
Mi spiego: devo dare la possibilita' di editare un qualsiasi file (.doc, 
.xls, .txt, eccetera) con l'editor - o programma - attualmente in uso 
sul computer ospite e, alla fine delle operazioni (chiusura file) 
eseguire alcune operazioni se lo stesso e' stato modificato.
Ora opero cosi':
1.Rintraccio il programma che gestisce quel determinato tipo di file
2.Faccio aprire il file dal programma con CreateProcess o, in casi molto 
rari con ShellExecute
3.Attendo che il file sia sbloccato
4.Confronto la data di modifica con quella precedente e, nel caso siano 
diverse, faccio alcune operazioni
Tutto ok ma ho difficolta' con il punto 3, nel senso che, ora, per 
controllare se il file e' o non e' bloccato lo apro con un ResetFile e 
controllo che l'errore di ritorno non sia ERROR_SHARING_VIOLATION oppure 
ERROR_LOCK_VIOLATION - questa tecnica funziona sul 90% dei sistemi ma, 
su alcuni, specie se il programma di gestione e' gia' aperto, non funge.
Domanda... esiste qualche tecnica migliore per monitorare la cosa?
Grazie a tutti,
David

Qualcuno di voi conosce il modo per controllare se un file e' gia' in 
uso? Ora utilizzo la tecnica di aprirlo e controllare che l'errore di 
ritorno non sia ERROR_SHARING_VIOLATION oppure ERROR_LOCK_VIOLATION ma 
non sempre funziona - ovvero mi dice che e' sbloccato quando, invece, lo 
e' ancora
Grazie a tutti

Scusate il doppio post, mi si e' incasinato il computer - sorry

 Domanda... esiste qualche tecnica migliore per monitorare la cosa?
Avevo postato in passato, penso verso maggio/giugno 2008, una routine 
che faceva proprio questo.
Nel frattempo ho cambiato posto di lavoro e il codice e' rimasto 
dall'altra parte ovviamente.
Ricordo che facevo uso di tfilestream annidato in try..except.. cercavo 
di aprire il file in modalitï¿œ *esclusiva* e ritornavo false se non 
l'ottenevo.
se sai come cercare nei post passati tramite google groups me lo fai 
sapere?
grazie
ciao
-- 
Morde

 Morde
Ciao, devi fare così:
StringaDaCercare group:it.comp.lang.delphi
clicca cerca nei gruppi
dove chiaramente StringaDaCercare è la parola o la frase che ti
interessa cercare.
Ciao
Micky

Grazie. Non l'ho trovato ma mi hai dato l'idea dei TFileStream e devo 
dire che funziona egregiamente.
Se ti interessa ho risolto cosi':
        Try
          F := TFileStream.Create(FileName, fmOpenReadWrite);
          F.Free;
          - File non bloccato -
        Except
          - File bloccato -
        End;
Ancora grazie dell'aiuto
(proprio vero... a volte le cose piu' semplici sono quelle che 
funzionano meglio)

 meglio)
Attenzione, avevo parlato di accesso esclusivo.. cosï¿œ sei sicuro al 
100% che nessun processo ha aperto un handle su quel file.
ciao
-- 
Morde

 clicca cerca nei gruppi
GRAZIE!
^___^
tant'ï¿œ che ho trovato la routine:
function IsFileAvailable(Const FileName: string): boolean;
var
  F: TFileStream;
begin
  try
    F := TFileStream.Create(FileName, fmOpenReadWrite OR 
fmShareExclusive);
    try
      Result := true;
    finally
      F.Free;
    end;
  except
    Result := false;
  end;
end;
-- 
Morde

Arigrazie