Domanda

Devo recuperare da un caso di errore in cui un file viene lasciato in uno stato bloccato. Come posso in c # dire a questo file di ripristinare i suoi blocchi? Devo aggiungere a questo il file è aperto da una dll di terze parti e in realtà non ho accesso all'handle del file.

È stato utile?

Soluzione

Potresti forse avviare un processo da riga di comando come net o psfile con qualcosa del tipo:

System.Diagnostics.Process.Start (" psfile c: \ myfile.txt -c ");

Puoi ottenere psfile qui .

Puoi anche usare

ID file netto / chiudi

ma ciò richiederebbe di conoscere l'ID file, che richiederebbe un po 'più di lavoro.

Non testato ma questo dovrebbe darti un punto di partenza.

Altri suggerimenti

Il blocco di un file è di responsabilità del sistema operativo (per conto del programma che lo apre). Se un file viene lasciato in uno stato bloccato, spetta al sistema operativo sbloccarlo. Ciò si verifica in genere automaticamente alla chiusura del processo che ha aperto il file.

C'è comunque un'utilità davvero interessante che mi sono imbattuto che mi aiuterà. Si chiama Unlocker .

Considererei davvero di trovare un'altra dll di terze parti. Qualsiasi sistema che gestisce i flussi dovrebbe rispondere correttamente alle condizioni di errore e non lasciare in atto elementi come i blocchi dei file.

È possibile che la libreria fornisca la ripulitura delle condizioni di errore, l'hai appena guardata? Prova qualcosa di simile al seguente,

 try {
   thirdPartyObj = new ThirdPartObj();
   // Some possible error causing object actions
 catch(Exception ex) {
   thirdPartyObj = null; // The object should close its resources
 }

Devi chiudere il file usando .Close (). Devi assicurarti di avere ancora un modo di accedere all'oggetto file.

Di solito puoi evitare questo errore scrivendo un costrutto try {} ... infine {} dopo il codice che esegue l'I / O del tuo file. Nel blocco infine {}, chiameresti il ??metodo Close dell'oggetto file, impedendo questa condizione. Puoi anche utilizzare un blocco using {} quando crei i tuoi file, e questo risolverà anche questo problema.

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