Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [c#] Stream File e IOexception

    Ciao a tutti, sarà l'ora tarda ma ho un problema che non riesco a risolvere:
    ho un metodo:
    Codice PHP:
    public void aggiornaPic()
    {
                        
    //altro...
                        
    try
                        {
                            
    FileStream fs = new FileStream(@".\logo"FileMode.OpenOrCreateFileAccess.WriteFileShare.ReadWrite);
                            
    fs.Write(rawData0filesize); //dove rawData è un array byte[] (in particolare viene preso da un campo BLOB di mysql ma non ha importanza e filesize è un intero (dimensione dell'array)
                            
    fs.Close();
                            
    fs.Dispose();
                        }
                        catch(
    Exception ex)
                        {
                            
    MessageBox.Show(ex.ToString());
                        }

    Ipotizziamo che richiamo questo metodo più volte (a distanza di tempo), ad esempio alla load del form e poi successivamente ogni volta che viene premuto un pulsante.
    Bè dalla prima all'ultima volta mi genera sempre l'eccezione (Il processo non può accedere al file).
    Qualche idea su come risolvere?

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    intanto fai un

    codice:
    fs.Flush();
    per aggiornare il file..

    poi quel file ".logo" cosè?? il filestream vuole tutto il percorso del file, a meno che non sia nella cartella di esecuzione...

  3. #3
    Ciao, grazie per la risposta.
    poi quel file ".logo" cosè?? il filestream vuole tutto il percorso del file, a meno che non sia nella cartella di esecuzione...
    quello è un problema del forum che elimina la \ nei tag [ php][/php ] forum, il nome corretto era ".\logo".
    Comunque si il file si trova nella stessa cartella dell'applicazione.
    Ho aggiunto il flush:
    Codice PHP:
    public void aggiornaPic()
    {
                        
    //altro...
                        
    try
                        {
                            
    FileStream fs = new FileStream(@".\\logo"FileMode.OpenOrCreateFileAccess.WriteFileShare.ReadWrite);
                            
    fs.Write(rawData0filesize); //dove rawData è un array byte[] (in particolare viene preso da un campo BLOB di mysql ma non ha importanza e filesize è un intero (dimensione dell'array)
                            
    fs.Flush();
                            
    fs.Close();
                            
    fs.Dispose();
                        }
                        catch(
    Exception ex)
                        {
                            
    MessageBox.Show(ex.ToString());
                        }

    ma il risultato è lo stesso, genera sempre l'exception

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Non ne sono certo ma invece di scrivere ".\logo" prova a scrivere "logo" o "\logo"...

  5. #5
    stesso errore con .\logo \logo e logo
    a questo punto posto un po' più di codice, la prima volta ciò avviene in un costruttore e poi di volta in volta in un metodo
    codice:
    class Azienda
    {
    	private int id;
    	private String ragioneSociale;
    	private String indirizzo;
    	private String cap;
    	private String citta;
    	private String provincia;
    	private String telefono;
    	private String fax;
    	private String email;
    	private String iva;
    	private Bitmap logo;
    	private int filesize;
    	
            public Bitmap getLogo()
            {
                return this.logo;
            }
    
    	public Azienda()
    	{
    		ConnessioneMySql mySql = new ConnessioneMySql(); //ConnessioneMySql è una classe create da me per gestire la connessione al db
    		if (mySql.connetti())
    		{
    			MySqlDataReader risultati = (MySqlDataReader)mySql.query("SELECT id, ragione_sociale, indirizzo, cap, citta, provincia, telefono, fax, email, pIva, logo, filesize FROM azienda LIMIT 1");
    			if (risultati.HasRows)
    			{
    				while (risultati.Read())
    				{
    					ragioneSociale = risultati.GetString("ragione_sociale").ToString();
    					id = risultati.GetInt32("id");
    					indirizzo = risultati.GetString("indirizzo").ToString();
    					cap = risultati.GetInt32("cap").ToString();
    					citta = risultati.GetString("citta").ToString();
    					provincia = risultati.GetString("provincia").ToUpper();
    					telefono = risultati.GetString("telefono").ToString();
    					fax = risultati.GetString("fax").ToString();
    					email = risultati.GetString("email").ToString();
    					iva = risultati.GetString("pIva").ToString();
    					filesize = risultati.GetInt32("filesize");
    					byte[] rawData = new byte[filesize];
    					risultati.GetBytes(risultati.GetOrdinal("logo"), 0, rawData, 0, filesize);
    					try
    					{
    						FileStream fs = new FileStream(@"logo", FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);
    						fs.Write(rawData, 0, filesize);
    						fs.Flush();
    						fs.Close();
    						fs.Dispose();
    					}
    					catch (Exception ex)
    					{
    						MessageBox.Show(ex.ToString());
    						//nothing
    					}
    
    					logo = new Bitmap(@"logo");
    				}
    			}
    			mySql.disconnetti();
    		}
    	}
    		
    	public void aggiornaDatiAzienda()
    	{
    		ConnessioneMySql mySql = new ConnessioneMySql();
    		mySql.connetti();
    		MySqlDataReader risultati = (MySqlDataReader)mySql.query("SELECT id, ragione_sociale, indirizzo, cap, citta, provincia, telefono, fax, email, pIva, logo, filesize FROM azienda LIMIT 1");
    		if (risultati.HasRows)
    		{
    			while (risultati.Read())
    			{
    				ragioneSociale = risultati.GetString("ragione_sociale").ToString();
    				id = risultati.GetInt32("id");
    				indirizzo = risultati.GetString("indirizzo").ToString();
    				cap = risultati.GetInt32("cap").ToString();
    				citta = risultati.GetString("citta").ToString();
    				provincia = risultati.GetString("provincia").ToUpper();
    				telefono = risultati.GetString("telefono").ToString();
    				fax = risultati.GetString("fax").ToString();
    				email = risultati.GetString("email").ToString();
    				iva = risultati.GetString("pIva").ToString();
    				filesize = risultati.GetInt32("filesize");
    				byte[] rawData = new byte[filesize];
    				risultati.GetBytes(risultati.GetOrdinal("logo"), 0, rawData, 0, filesize);
    				try
    				{
    					FileStream fs = new FileStream(@"logo", FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);
    					fs.Write(rawData, 0, filesize);
    					fs.Flush();
    					fs.Close();
    					fs.Dispose();                 
    				}
    				catch(Exception ex)
    				{
    					MessageBox.Show(ex.ToString());
    					//nothing
    				}
    
    				logo = new Bitmap(@"logo");
    			}
    		}
    		mySql.disconnetti();
    	}
    }
    Il file sul computer viene creato, in quanto quando riavvio il programma (anche se genera l'eccezione) l'immagine viene visualizzata.
    Se invece carico una nuova immagine mentre il programma è avviato il metodo aggiornaDatiAzienda da ancora eccezione ma non carica l'immagine, al riavvio successivo mi trovo l'immagine aggiornata,

    edit:
    Mi accorgo quando non va in quanto dovrei visualizzare l'immagine aggiornata con questo metodo:
    codice:
    private void frmPrincipale_Load(object sender, EventArgs e)
    {
                azienda = new Azienda();
                picLogoAzienda.Image = azienda.getLogo();
    }
    
    private void cmdGenerale_Click(object sender, EventArgs e)
    {
                azienda.aggiornaDatiAzienda();
                picLogoAzienda.Image = azienda.getLogo();
    }

  6. #6
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    a questo punto prova a mettere l'intero path... però è strano..

  7. #7
    risolto
    ho usato il seguente codice sia nel costruttore che nel metodo per aggiornare.
    Così non creo neanche il file "logo" che non serviva effettivamente ed era poco elegante ^^
    Codice PHP:
    MemoryStream stream = new MemoryStream(rawData0filesize);
    logo = new Bitmap(stream);
    stream.Close();
    stream.Dispose(); 
    ciau

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.