|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Sep 2005
Messaggi: 20
|
[c#] Gestione errori try-catch concorrenza file
Salve,
ho scritto un applicativo in c# su visual studio 2008. Mi trovo a dover gestire una concorrenza su un file da cancellare che viene scritto da un'altra applicazione. Ho inserito la file.delete all'interno del try e vorrei, semplicemente, che se non riesce a cancellarlo non ritorni nessun errore, perchè poi ci riproverà al successivo giro dell'applicazione. Adesso invece se trova il file occupato da un altro processo mi si blocca l'applicazione con l'errore che non ha potuto accedere al file. Come devo gestirla? Grazie!!! Ciao!
__________________
"Aspetto che il panico cresca, quando la paura si tramuta in visioni celestiali, inizio a staccare..." (Schwantz) |
|
|
|
|
|
#2 | |
|
Bannato
Iscritto dal: Nov 2008
Messaggi: 136
|
Quote:
Codice:
try
{
//tentativo di eliminazione file
}
catch(Exception ex)
{
}
|
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Lecce
Messaggi: 3936
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Sep 2005
Messaggi: 20
|
Codice:
if (by_ing5.Length > 0 && by_ing6.Length > 0)
{
try
{
File.Delete(@"Z:\TEMP\scatta_usc");
}
catch { }
}
__________________
"Aspetto che il panico cresca, quando la paura si tramuta in visioni celestiali, inizio a staccare..." (Schwantz) |
|
|
|
|
|
#5 | |
|
Junior Member
Iscritto dal: Sep 2005
Messaggi: 20
|
Quote:
Grazie!
__________________
"Aspetto che il panico cresca, quando la paura si tramuta in visioni celestiali, inizio a staccare..." (Schwantz) |
|
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 8
|
Ciao a tutti,
ho letto quanto suggerito e concordo su quasi tutto. Infatti stare in ascolto sulla exception è corretto ma io starei un po' meno generico. Infatti: 1) starei solo in ascolto solo sulle eccezioni di tipo IOException 2) nel caso di eccezioni di tipo IOException inoltre andrei a vedere se l'eccezione era dovuta al fatto che il file è lokkato da altri processi e non per altri motivi Ecco il mio codice try { File.Delete(fileName); } catch (IOException ex) { if (IsFileLocked(ex)) { //siamo d'accordo che non devi fare nulla } else { throw; } } dove la procedura IsFileLocked è la seguente. private static bool IsFileLocked(IOException exception) { int errorCode = Marshal.GetHRForException(exception) & ((1 << 16) - 1); return errorCode == 32 || errorCode == 33; } Ziggy.
__________________
Ziggy |
|
|
|
|
|
#7 | |
|
Junior Member
Iscritto dal: Sep 2005
Messaggi: 20
|
Quote:
il delete e tutto il resto adesso sembra funzionare con try e cathc(IOException ex), il nuovo problema riguarda una dll che carico nell'onLoad del form, il tutto funziona per un certo tempo quando dopo un po' di ore mi ritrovo che è andato in errore, dagli AppCrash che salva windows 7 sembra che sia la dll in questione ad andare in errore, ma non so come gestirla. Dovrei poter riavviare il programma in automatico quando si blocca ma non so se è possibile, anche perchè non mi ritorna un errore di una particolare funzione del mio programma ma sembra che sia la dll stessa ad andare in errore e non posso gestirla. Bohhhh
__________________
"Aspetto che il panico cresca, quando la paura si tramuta in visioni celestiali, inizio a staccare..." (Schwantz) |
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 8
|
scusa ma non puoi semplicemente mettere le chiamate a questa dll sotto dei blocchi try catch?
così se la chiami e spacca, intercettando l'errore, non ti crassha la tu app. oppure proverei a caricare e scaricare la dll prima e dopo l'utilizzo!
__________________
Ziggy |
|
|
|
|
|
#9 | |
|
Junior Member
Iscritto dal: Sep 2005
Messaggi: 20
|
Quote:
Codice:
public void Form1_Load(object sender, EventArgs e)
{
//caricamento e avvio dell'applicazione Anpr all'apertura della finestra (Form1)
AnprSupport.Instance.Open(Handle); //collegata al riferimento della finestra Handle
AnprSupport.Instance.LoadConfiguration("anpr2test.ini"); //caricamento file configurazione
AnprSupport.Instance.ReadReceived += ReadHandler; //collegamento alla funzione ReadHandler alla ricezione della lettura
AnprSupport.Instance.Start(); //avvio dell'applicazione
System.Diagnostics.Process test = System.Diagnostics.Process.Start("C:\\Program Files\\etech\\setup_diatec\\Diatec1.exe","/MIN");
Worker workerObject = new Worker();
Thread workerThread = new Thread(workerObject.DoWork);
workerThread.Start();
}
__________________
"Aspetto che il panico cresca, quando la paura si tramuta in visioni celestiali, inizio a staccare..." (Schwantz) |
|
|
|
|
|
|
#10 |
|
Junior Member
Iscritto dal: Sep 2005
Messaggi: 20
|
solo la modifica della dll stessa ha risolto il problema
__________________
"Aspetto che il panico cresca, quando la paura si tramuta in visioni celestiali, inizio a staccare..." (Schwantz) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:25.




















