Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

João Fernandes dos Santos

Erro ao fechar arquivo

Recommended Posts

Pessoal, boa tarde.

Estou com o seguinte problema:

Estou executando este código abaixo, esta quase tudo dando certo, o erro esta quando vou deletar a imagem antiga que não esta no formato GIF, esta me retornando esse erro:

 

codigo para deletar a imagem:

(

Kill("C:\Users\Supervisor\Desktop\Desenvolvimento\Mega\Mega\ImagensProdutos\" & s2)

)

 

erro gerado:

 

O processo não pode acessar o arquivo 'C:\Users\Supervisor\Desktop\Desenvolvimento\Mega\Mega\ImagensProdutos\19942.JPG' porque ele está sendo usado por outro processo.

 

 

 

 

 

Protected Sub btnSalvarImagem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSalvarImagem.Click

 

 

Dim NomeArquivo As String

Dim Extensao As String

'atribuo a variável com o nome do arquivo

NomeArquivo = FileUpload1.PostedFile.FileName

 

'atribuo a váriavel a extensão do arquivo

Extensao = Path.GetExtension(NomeArquivo).ToUpper

 

'verifico se as extensao esta entre "JPG,PNG,JPEG,GIF"

If (Extensao <> ".JPG") And (Extensao <> ".PNG") And (Extensao <> ".JPEG") And (Extensao <> ".GIF") Then

Page.ClientScript.RegisterStartupScript(Me.GetType, "Aviso", "window.alert('Extensão de arquivo inválida. Utilize somente .JPG ou .JPEG ou .PNG ou .GIF');", True)

Exit Sub

End If

 

 

Dim s2 As String

'declaro a variável e atribuo a ela o caminho de onde vai salvar o arquivo

Dim CaminhoDaPasta As String = "C:\Users\Supervisor\Desktop\Desenvolvimento\Mega\Mega\ImagensProdutos\"

 

'concateno o id do produto com a extensão

s2 = lblIdProduto.Text & Extensao

 

 

'copio a imagem para o novo caminho

FileUpload1.SaveAs(CaminhoDaPasta & s2)

 

'se a extensão for diferente de GIF entro no if para convertê-la

If Extensao <> ".GIF" Then

'Converto a imagem em Bitmap, por ser mais leve que as outras

Dim objBmp As New Bitmap("C:\Users\Supervisor\Desktop\Desenvolvimento\Mega\Mega\ImagensProdutos\" & s2)

'Salvo a nova imagem no formato GIF

objBmp.Save(String.Concat("C:\Users\Supervisor\Desktop\Desenvolvimento\Mega\Mega\ImagensProdutos\" & lblIdProduto.Text, ".bmp"), Imaging.ImageFormat.Gif)

End If

 

 

'gravo o nome da imagem e sua extensão no banco de dados para controle.

Strsql = "sp_GravaNomeImageProdutos " & lblIdProduto.Text & ",'" & Session("Login") & "','" & lblIdProduto.Text & ".GIF','" & ddlFornecedor.Text & "','" & ddlTipo.Text & "'"

ExecutaSQL(Strsql)

 

 

'AQUI QUE ESTA DANDO ERRO, QUANDO TENTO DAR UM KILL' 'apago a imagem anterior

If File.Exists("C:\Users\Supervisor\Desktop\Desenvolvimento\Mega\Mega\ImagensProdutos\" & s2) Then

Kill("C:\Users\Supervisor\Desktop\Desenvolvimento\Mega\Mega\ImagensProdutos\" & s2)

End If

 

 

Try

Page.ClientScript.RegisterStartupScript(Me.GetType, "Aviso", "window.alert('Imagem anexada com sucesso.');", True)

Catch ex As Exception

Session("ERRO") = ex.Message & " - " & Request.Path & " - Cadastro de produto"

Response.Redirect("Erro.aspx")

End Try

 

 

 

End Sub

 

 

 

 

 

Ja tentei usar o fileclose mais sem sucesso.

 

 

Alguêm tem alguma idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi muito bem o cenário, mas será que o File.Delete não resolve ?

 

outra tentativa pode ser chamar o Dispose e o Finalize da classe Bitmap

 

 

boa sorte

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eriva desde ja obrigado, mas não deu certo.

 

Vou resumir o meu cenário:

 

1) copio a imagem para o servidor (fileupload)

2) se a imagem que eu copiei não for GIF então eu converto ela.

3) Tenho a nova imagem que converti para GIF e a imagem antiga que foi usada para gerar a nova imagem,

4) agora quero apagar essa imagem antiga, ou seja, a imagem com a outra extensão.

 

Ficou claro ou ta confuso ainda?

 

Meu problema esta no passo 4, quando vou apagar a imagem me retorna o erro que esta ja esta sendo usada por outro processo, ja tenti o file.close, e o file.delete me da o mesmo erro fala que ela esta sendo usada.

 

Alguêm ai para dar uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que o problema é pq. o arquivo esta vinculado a classe bitmap e essa classe não tem o close, faz assim tenta converter o arquivo em um memorystream e jogar esse memorystream na classe bitmap, pois o memorystream tem a função close que irá desvincula-lo do arquivo, possibilitando que este seja excluído

Compartilhar este post


Link para o post
Compartilhar em outros sites

João, após você converter, você dá um Dispose() no objeto, e depois tenta deletar que vai funfar.

acho que só o dispose não resolve, pois esse tb. existe na classe bitmap, tem que dar o close tb.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.