View Full Version : [C#] Cancellare file e directory in uso
mcardini
07-05-2008, 07:59
Ciao a tutti,
premetto che sono solo all'inizio e ho ancora MOLTO da imparare sul c#, quindi se posto codice scritto con i piedi, non mi massacrate. :D
Ho un piccolo problema, sto svipuppando una piccola utility per cancellare un dir specifica (creata da un programma e temporanea) dalla dir apps del profilo utente.
La prime versioneda me sviluppata, crashava se la dir che voleva cancellare era in uso perche il programma era aperto, ora con un "try" non crasha piu' ma volevo far apparire un msgbox per avvertire che il programma e' in uso e bisogna chiuderlo per permettere la cancellazione dei files.
Come posso fare?
RaouL_BennetH
07-05-2008, 10:34
Ciao :)
Sono un neofita anche io, ed in una situazione simile ho fatto questo:
private bool ProgramIsRunning()
{
bool programRunning = false;
foreach(Form f in Application.OpenForms)
{
if(!f.IsDisposed)
{
programRunning = true;
return programRunning;
}
}
return programRunning;
}
private btnExit_Click(object sender, EventArgs e)
{
if(ProgramIsRunning())
{
MessageBox.Show("ci sono ancora applicazioni aperte, chiuderle per continuare");
}
//blabla
}
Non prenderlo come modello di codice perchè come ti dicevo sono anche io molto inesperto, ma magari come idea :)
||ElChE||88
07-05-2008, 11:00
La prime versioneda me sviluppata, crashava se la dir che voleva cancellare era in uso perche il programma era aperto, ora con un "try" non crasha piu' ma volevo far apparire un msgbox per avvertire che il programma e' in uso e bisogna chiuderlo per permettere la cancellazione dei files.
Come posso fare?
Tipo così?
try
{
File.Delete(path);
}
catch (IOException e)
{
MessageBox.Show("TESTO", "TITOLO", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
mcardini
07-05-2008, 12:04
Grazie per le risposte...
Intanto vi posto il mio senza il controllo che mi serve.
try
{
Directory.Delete(path, true); //Cancella i dati
MessageBox.Show("Sistema ripulito con successo", "Eseguito", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
if (exist==false)
MessageBox.Show("Non c'era bisogno di cancellare, tutto era pulito", "Eseguito", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
// qui manca quello che mi serve
// MessageBox.Show("Chiudere tutte le applicazioni e riprovare", "Applicazione in esecuzione!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
@RaouL_BennetH, il tuo approccio mi sembra giusto ;)
mcardini
07-05-2008, 18:17
HO RISOLTO!!!
E' bastato un semplice if... son davvero scarso in c#, ci ho perso 2 giorni e bastava un if.
Comunque posto il codice, se dovesse servire a qualcuno...
Grazie a tutti comunque
exist = Directory.Exists(path); //Controllo per vedere se il path esiste
try
{
Directory.Delete(path, true); //Cancella i dati
MessageBox.Show("Sistema ripulito con successo", "Eseguito", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
if (exist == false)
MessageBox.Show("Non c'era bisogno di cancellare, tutto era pulito", "Eseguito", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
if (exist==true)
MessageBox.Show("Chiudere tutte le applicazioni e riprovare", "Applicazione in esecuzione!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
oddio una soluzione migliore esiste (quasi) sempre!
in questo caso al posto degli if basta istituire un blocco catch per ognuna delle condizioni verificabili che ti interessa gestire.
try
{
Directory.Delete(path, true); //Cancella i dati
MessageBox.Show("Sistema ripulito con successo", "Eseguito", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (DirectoryNotFoundException)
{
MessageBox.Show("Non c'era bisogno di cancellare, tutto era pulito", "Eseguito", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
catch (IOException)
{
MessageBox.Show("Chiudere tutte le applicazioni e riprovare", "Applicazione in esecuzione!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
mcardini
08-05-2008, 11:12
oddio una soluzione migliore esiste (quasi) sempre!
in questo caso al posto degli if basta istituire un blocco catch per ognuna delle condizioni verificabili che ti interessa gestire.
try
{
Directory.Delete(path, true); //Cancella i dati
MessageBox.Show("Sistema ripulito con successo", "Eseguito", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (DirectoryNotFoundException)
{
MessageBox.Show("Non c'era bisogno di cancellare, tutto era pulito", "Eseguito", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
catch (IOException)
{
MessageBox.Show("Chiudere tutte le applicazioni e riprovare", "Applicazione in esecuzione!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Grazie!!
Davvero gentile, questo e' un buono spunto...
Un giorno forse arriverò anche io a imparare bene :sofico:
RaouL_BennetH
08-05-2008, 14:25
Ma porcaccia miseria ....
Secondo me, l'errore che commettiamo sopratutto noi principianti è di cercare di fare le cose più complicate di quelle che sono !
Mi è capitato diverse volte di scrivere un codice su poche righe e pensare:
Non può essere così semplice, evidentemente non ho capito il problema...
E giù a buttare altre righe di codice solo per incasinare di più il tutto :(
Fine ot :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.