Array
(
)

Erro: The process cannot access the file 'e:\home\xxxx\xxx.jpg' because it is being used by another process.

Márcio Camacho
   - 07 jul 2011

E aew galera!
Sou novo de registro aqui o fórum, mas sempre acompanho as dúvidas do pessoal, que geralmente são minhas também. Hoje estou com um probleminha aqui.
Tenho um cadastro de imagens do banner em um site. No processo, é gerado uma thumb da imagem.Até ai sem problmas. A imagem é salva no meu diretório, junto com sua thumb, tudo normalmente.
Porém, se eu quiser excluir essa imagem logo em seguida, pouco tempo após fazer seu upload, o segundo erro é retornado:

The process cannot access the file 'e:\home\xxxx/xxx.jpg' because it is being used by another process.

Aparentemente, algum processo do servidor ainda está usando a imagem (a que deu origem à thumb). Se eu esperar alguns minutos, consigo excluir essa imagem do meu servidor sem nenhum problema.
Esse erro só está ocorrendo em rotinas onde preciso gerar thumb da imagem da qual foi feito um upload.
Na internet está cheio de tópicos com esse problema, mas nenhum com uma resolução funcional.
Valeu, quem puder me ajudar, agradeço!!

Hernane Goncalves
   - 08 jul 2011

Você conferiu as permissões de pasta (escrita e leitura) no seu servidor?   tem como você colocar seu código aqui?

Márcio Camacho
   - 08 jul 2011

Opa!
Sim, as permissões são de gravação e leitura sim.
Tanto que em páginas nas quais eu não gero o thumbnail da imagem, não existe esse problema. Insiro, excluo, sem precisar esperar um tempo para que o servidor pare de fazer uso. Acredito que seja alguma coisa em relação à essa geração das thumbs.
Segue o código:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.IO;using System.Data;
namespace site{    public partial class WebForm3 : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            if (!Page.IsPostBack)            {                pnCadImagem.Visible = false;                pnExibeImagens.Visible = true;                pnOps.Visible = false;
                btnExibir_Click1(null, null);                lbTituloPagina.Text =  "Imagens do Banner";
                btnExibir_Click1(null, null);            }                    }
        //método abaixo usado para geração das thumbnails.        public bool Retorno()        {            return false;        }

        protected void btnSalvar_Click(object sender, EventArgs e)        {                if (Page.IsValid)                {                    Banner bn = new Banner();
                    bn.Link = tbLink.Text;                    bn.TextoBanner = tbTextBanner.Text;
                    //se for um update                    if (btnSalvar.Text == "Salvar Alterações")                    {                        bn.Codigo = Convert.ToInt32(hdCodigoBanner.Value);                        bn.AtualizarLink(); btnExibir_Click1(null, null);
                    }                                        //verificar se não é uma alteração para inserir a imagem                    if (btnSalvar.Text != "Salvar Alterações")                    {                        //verificar se o arquivo é válido                        string ext = System.IO.Path.GetExtension(fuImgBanner.PostedFile.FileName.ToLower());
                        if (ext == ".jpg" || ext == ".jpeg" || ext == ".bmp" || ext == ".bmp" || ext != ".gif")                        {                            //padrão para o nome da imagem é a diaMêsAnoHora                            //definir numa string fixa para poder reaproveitar quando salvar no banco de dados                            string nomeImagem = "img/img-banner/" + DateTime.Now.ToString("ddMMyyyy-HHmmss");                                                        string nomeImagemThumbs = nomeImagem + "thumb.jpg";                            nomeImagem += ".jpg";

                            fuImgBanner.PostedFile.SaveAs(Server.MapPath(nomeImagem));
                            //gravar o caminho das imagens                            bn.LocalImagem = nomeImagem;                            bn.ImgThumbs = nomeImagemThumbs;
                            ///////////////////////////////////////////////////////////////////////////////                            ////////////////////////////gerar a thumb da imagem://////////////////////////                            //string nomeImagemThumbs = "img/img-banner/" + DateTime.Now.ToString("ddMMyyyy-HHmmss") + "thumb.jpg";                            int largura, altura;
                           // System.Drawing.Image thumnail = System.Drawing.Image.FromFile(Server.MapPath(nomeImagem));      System.Drawing.Image thumnail = System.Drawing.Image.FromFile(Server.MapPath(nomeImagem));                            //System.Drawing.Image thumnail = System.Drawing.Image.FromFile(fuImgBanner.PostedFile.FileName);
                            largura = Convert.ToInt32(thumnail.Width * 0.10);                            altura = Convert.ToInt32(thumnail.Height * 0.10);
                            thumnail = thumnail.GetThumbnailImage(largura, altura, new System.Drawing.Image.GetThumbnailImageAbort(Retorno), IntPtr.Zero);                            thumnail.Save(Server.MapPath(nomeImagemThumbs));
                  
                            //gravar no banco de dados                            bn.GravarBanner();                                                                                   btnExibir_Click1(null, null);                        }                        else                        {                            lbMsgUpload.Text = "* Favor inserir uma imagem (.jpg, .jpeg, .gif ou .bmp)";                        }                    }
                        }        }
        protected void btnNovaImagem_Click(object sender, EventArgs e)        {            //verificar se já foi inserida a quantidade máxima de 6 banners...            Banner bn = new Banner();
            if (Convert.ToInt32(bn.ContarBanners()) >= 6)            {                pnOps.Visible = true;                pnExibeImagens.Visible = false;                pnCadImagem.Visible = false;            }            else            {                pnCadImagem.Visible = true;                pnExibeImagens.Visible = false;                pnOps.Visible = false;
                RequiredFieldValidator1.Enabled = true;                fuImgBanner.Enabled = true;                tbLink.Text = "";                tbTextBanner.Text = "";                imgBanner.Visible = false;                btnSalvar.Text = "Inserir no Banner";            }        }
        protected void dlBanner_ItemCommand(object source, DataListCommandEventArgs e)        {            if (e.CommandName == "editar")            {                //guardar o código para ser usado posteriormente                hdCodigoBanner.Value = e.CommandArgument.ToString();
                pnExibeImagens.Visible = false;                pnCadImagem.Visible = true;                pnOps.Visible = false;
                Banner bn = new Banner();
                bn.Codigo = Convert.ToInt32(e.CommandArgument);
                DataTable dt = bn.SelecionarBanner();
                imgBanner.Visible = true;                tbLink.Text = dt.Rows[0]["img_banner_link"].ToString();                tbTextBanner.Text = dt.Rows[0]["img_banner_texto"].ToString();                imgBanner.ImageUrl = dt.Rows[0]["img_banner_local"].ToString();
                                btnSalvar.Text = "Salvar Alterações";                fuImgBanner.Enabled = false;                RequiredFieldValidator1.Enabled = false;
                //btnSalvar.CausesValidation = false;
            }            if (e.CommandName == "excluir")            {                Banner bn = new Banner();                bn.LocalImagem = e.CommandArgument.ToString();                                //excluir a imagem da pasta do servidor..                File.Delete(MapPath(Convert.ToString(e.CommandArgument)));
                string imgThumb = Convert.ToString(e.CommandArgument);                int tamanho = imgThumb.Count();
                //retira o ".jpg" e adiciona "-thumbs.jpg"                imgThumb = imgThumb.Substring(0, tamanho - 4);                imgThumb += "thumb.jpg";
                File.Delete(MapPath(Convert.ToString(e.CommandArgument)));                File.Delete(MapPath(imgThumb));                                                bn.ExcluirImagemBanner();
                btnExibir_Click1(null, null);                        }
        }
        protected void btnExibir_Click1(object sender, EventArgs e)        {            pnCadImagem.Visible = false;            pnExibeImagens.Visible = true;            pnOps.Visible = false;            lbTituloPagina.Text = "Imagens do Banner";
            Banner bn = new Banner();
            dlBanner.DataSource = bn.ExibirBanner();            dlBanner.DataBind();
        }    }}
Qualquer dúvida em relação ao código estamos ai. Obrigado pela atenção!