Delphi: controlla se il file è in uso
Domanda
Voglio scrivere / cancellare un file ma a volte ottengo un arresto anomalo se il file è in uso da un altro programma. Come posso verificare se il file viene aperto da un altro processo o posso aprirlo per la scrittura?
Soluzione
Il problema è che tra il momento in cui si controlla se è possibile ottenere l'accesso esclusivo e l'apertura del file, qualcos'altro ottiene l'accesso esclusivo al file e si ottiene comunque l'eccezione.
L'unico modo infallibile per vedere se riesci a ottenere un blocco esclusivo su un file è provare a ottenere un blocco esclusivo sul file, se lo ottieni ce l'hai.
Altrimenti, prendi l'eccezione e
- Vai a fare qualcos'altro
- Attendi qualche istante e riprova
È una delle situazioni della vita & # 8217; s in cui è meglio chiedere perdono che permesso :)
Altri suggerimenti
Esiste un nuovo modo per ottenere l'origine del blocco dei file per Vista e fino qui: http: // www. remkoweijnen.nl/blog/2011/01/03/cannot-access-files-but-need-the-origin/
UserMode: Il modo migliore per scrivere su un file bloccato è chiedere all'utente di chiuderlo nell'altro processo. Nei processi batch è necessario ignorare tale file e registrare il problema. Fornire il nome dell'altro processo è un ottimo modo per trovare una soluzione per l'utente.
Non sono sicuro in quale linguaggio di programmazione desideri verificare se riesci a scrivere su un file. In Java, java.io .File.canWrite () può fare il lavoro per te.
Generale:
Nel SO simile a UNIX, puoi usare il comando lsof .
Se vuoi vedere quale programma contiene un handle per il tuo file, usa Process Monitor (download da MicroSoft).
Questo strumento ha un'interfaccia a riga di comando, quindi puoi utilizzare l'interfaccia di scripting della tua lingua (ad esempio java.lang.Process
) per eseguire lo strumento e visualizzare un utile messaggio di errore.
IsFileInUse come indicato in http://delphi.about.com/cs /adptips1999/a/bltip0999_3.htm