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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top