6 messaggi dal 24 novembre 2011
Buongiorno a tutti,
ho la necessità di eliminare un file xml dall'isolated storage e ricrearlo con delle modifiche apportate dall'utente. Riesco ad aprire il file e a leggerlo ma non riesco ad eliminarlo. L'operazione mi ritorna il seguente errore: "Operation non permitted on IsolatedStorage". Credo che la causa sia il fatto che il file specifico sia ancora aperto o lo sia lo stream di lettura, ma tali operazioni sono inserite in clausole Using e quindi dovrebbero essere chiuse al termine dell'esecuzione. Posto un po' di codice:

using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
XDocument xRoot;
xRoot = XDocument.Load(isoStore.OpenFile(nomeFile, System.IO.FileMode.Open, System.IO.FileAccess.Read));

var elementi = from e in xRoot.Descendants("elemento")
select e;

xRoot = null;
}

dopo aver letto gli elementi che mi interessano ed aver apportato le modifiche necessarie eseguo il codice:

using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
try
{
if (isoStore.FileExists(nomeFile))
MessageBox.Show("ESISTE!");

isoStore.DeleteFile(nomeFile);

eliminato = true;
}
catch(Exception ex)
{
MessageBox.Show("Errore eliminazione: " + ex.Message);
}

if (eliminato == true)
{
try
{
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(nomeFile, FileMode.Create, isoStore))
{
doc.Save(isoStream);
}
}
catch(Exception ex)
{
MessageBox.Show("Errore creazione: " + ex.Message);
}
}
}
}
catch
{
MessageBox.Show("Errore nella generazione dell schema!");
}

Ma ritorna l'errore di cui sopra.

Il codice sopra funziona se invece di tentare di eliminare e ricreare lo stesso file, archivio le modifiche in un nuovo file, quindi credo che il problema sia che il file e' ancora aperto ma non riesco a chiuderlo.

Attendo vostri suggerimenti, grazie.
69 messaggi dal 12 luglio 2010
Ciao! Prova a chiamare i metodi Dispose e Close nei stream che apri. Il blocco "using" non fa questo automaticamente.
6 messaggi dal 24 novembre 2011
Ciao,
grazie per la risposta. Nel codice che ho postato non apro uno stream ma utilizzo il metodo load della classe XDocument che comunque dovrebbe chiudere il flusso automaticamente. Inoltre using sull'istanza dell'isolated storage fa il dispose automatico al termine dell'utilizzo, anche se per scrupolo ho fatto il dispose dell'istanza dello store dopo aver letto il file. Ho provato anche ad utilizzare uno stream e a fare il dispose al termine ma il risultato è lo stesso...

Non riesco a capire se rimane aperto da qualche altra parte...

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.