Erro: The process cannot access the file 'e:\home\xxxx\xxx.jpg' because it is being used by another process.
07/07/2011
0
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!!
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!!
Márcio Camacho
Curtir tópico
+ 0
Responder
Posts
08/07/2011
Hernane Goncalves
Você conferiu as permissões de pasta (escrita e leitura) no seu servidor?
tem como você colocar seu código aqui?
Responder
08/07/2011
Márcio Camacho
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!
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!
Responder
Clique aqui para fazer login e interagir na Comunidade :)