Ricerca 
it-ITen-US
Registrazione
Accedi
In-Vesti Dotnetwork
IN-VESTI DNW!!!
Sono finalmente arrivate le nuovissime T-Shirt di DotNetWork!!! Con soli 15,00 € ci sosterrai nelle spese di gestione della Community e ti invieremo a casa una splendida maglietta.
Se vuoi contribuire al mantenimento di DotNetWork.it Vai sulla pagina Iscrizioni
Effettua il pagamento usando IWBank
Click per andare alla pagina di Iscrizione
Oppure un Bonifico bancario (le coordinate sono sulla pagina Iscrizioni), inviaci una mail a support@dotnetwork.it indicandoci la tua taglia e l'indirizzo di spedizione.  Non appena verificata la ricezione del pagamento provvederemo a spedirti la tua T-Shirt.  Le magliette sono disponibili nelle taglie S-M-L-XL-XXL (in caso di esaurimento di una delle taglie, indica quella di "Backup"). Grazie per IN-VESTIRTI con NOI!!!
.:DotNetWork Founders:.
    Stampa     


DotNetWork Forums
Eccezione con la creazione di file XML
Ultimo Post 22 ott 2009 22.29 by Rudy (DNW TEAM). 3 Risposte.
Stampa immediata
Ordina:
PrevPrev ProssimoProssimo
Non sei autorizzato ad inviare una risposta.
Autore Messaggi Risolto

Posts:54

--
22 ott 2009 14.42  
Ciao a tutti. Espongo subito il problema.
In una sub, dopo aver acquisto una lista di oggetti proveniente da una query linqToSql, creo un file xml dove inserisco i dati della query. Il file risiede nella cartella Upload del progetto; naturalmente prima di crearlo eseguo un controllo sull'esistenza di un file vecchio, che se risulta positivo cancella quello già presente e poi procede alla creazione di quello nuovo.
Tutto bene se i dati trasformati in formato XML sono pochi; quando, invece, essi sono considerevoli, a volte anche più di 10.000 oggetti, si presenta la seguente eccezione:
"Il processo non può accedere al file 'C:\Users\Amministratore\Documents\Visual Studio 2008\WebSites\WebSite3\upload\Contatti.xml' perché è in uso da un altro processo."
E' probabile che quando il file da cancellare sia di grandi dimensioni il processo di eliminazione ci metta più tempo e quindi contrasti con quello di creazione.
C'è un modo per evitare il problema e quindi l'eccezione?
Grazie tante.
Giovanni Puglisi.

Posts:657

--
22 ott 2009 15.03  
Puoi creare una funzione tipo questa che controlla se il file è in uso:

static bool FileInUse(string path)
{
    try
    {
        //Provo ad aprire o creare il file
        using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
        {
     //Qui puoi anche controllare se puoi leggere o scrivere fs.CanRead o fs.CanWrite
        }
        return false;
    }
    catch (IOException ex)
    {
 //Il file è in uso o bloccato
        return true;
    }
}

Se si attendi un pò con un Thread.Sleep e poi riprova. Attento a non bloccare il thread principale della tua applicazione ASP.NET altrimeni blocchi tutto.
Rudy Azzan

Posts:54

--
22 ott 2009 20.33  
Ti ringrazio ancora. Il codice funziona. Solo una domanda ancora. Il tempo in millisecondi che devo impostare su Thread.sleep() è arbitrario, oppure devo tenere conto di qualcosa per calcolarlo. Ho fatto più tentativi ed ho notato che con quattro secondi me la cavo, con tre invece, a volte si altre volte no. Sicuramente il tempo dipende dalla dimensione del file da cancellare. Quindi se il problema è la dimensione del  file da eliminare (e naturalmente dalle prestazioni del PC a fare questa operazione) sarebbe giusto impostare una variabile che tenga conto di questo, magari con una select per fasce di dimensioni in modo da non fare aspettare né troppo e sollevare l'eccezione,  né tanto la risposta dal server?
Giovanni Puglisi

Posts:657

--
22 ott 2009 22.29  
Se in 3 secondi non arrivi dopo generato l'eccezione, riprovi e arrivi
Rudy Azzan
Non sei autorizzato ad inviare una risposta.

Active Forums 4.1
       
Articoli
Ereditarietà applicata ai controlli
Creazione di una combobox che mostra immagini al posto del testo
2008/07/06 | Autore: Andrea Zingoni
Visual Studio LightSwitch Beta 1 - Installazione
La procedura di installazione e le risorse sul web
2010/08/24 | Autore: Mario De Ghetto
Briciole di ereditarietà
Come aggiungere ulteriori funzionalità alla TreeView personalizzata
2009/06/05 | Autore: Francesca Mazzoni
Programmer Paster Addin per Expression Web 1 e 2
Implementare un Addin per Expression Web 1 e 2 che usa la libreria ProgrammerPaster
2009/02/26 | Autore: Rudy Azzan
SQL Server Nozioni base (parte 2)
Come creare un database in SQL Server Usando solo il codice SQL
2008/03/09 | Autore: Sabrina Cosolo
Panoramica del Sistema dei Comandi
Come iniziare a capire com'è fatto WPF (parte 5)
2007/09/30 | Autore: Patrizia Cosolo
Installer Utility - Utilizzare le Azioni Personalizzate
Come creare automaticamente il DataBase durante il processo di installazione
2007/08/14 | Autore: Alberto De luca
Iniziare da zero con WPF (Parte 2)
Iniziamo a scoprire gli oggetti Application e Window
2007/09/30 | Autore: Sabrina Cosolo
    Stampa     
Home|Forums|Blogs|Mappa del sito
© 2007-2010 by DotNetWork  .:.  Condizioni d'uso  .:.  Privacy  .:.  Accedi  .:.