Ir para conteúdo

Arquivado

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

Liberdade

Outro Processo

Recommended Posts

Bom dia,, eu tenho esse código que chama algumas funções de validação de arquivos e se tudo estiver ok.. ele exportar para csv o arquivo XLS que ele leu e validou.

Mas o que acontece, em determinados momentos quando dá erro na validação ao re-processar o arquivo diz que o mesmo está sendo usado por outro processo.. Penso eu que seja o processo anterior quando deu o erro e ao corrigir o erro no arquivo xls e tentar re-processar ele diz que o arquivo ainda está sendo usado pelo processo anterior.

Como eu posso fazer para quando der erro nas validações ele matar tb o processo para que ao tentar o re-processamento do arquivo não venha mais essa mensagem.

Como eu estou fazendo hoje.. quando dá essa mensagem eu tenho que ir no servidor entrar no gerenciador de tarefas do Windows e matar o processo aspnet_wp.exe, só assim eu posso deletar o arquivo antigo e reprocessar..

O que o sistema faz.. O cliente entra na primeira página e infoma o CNPJ, se esse cnpj é válido ele passar para uma próxima página e o número desse cnpj é passada via sessão para a proxíma página.. nessa página ele faz o upload de um arquivo XLS, quando ele clica nesse botão cujo código abaixo está é gerado um número randômico com o conteúdo do arquivo xls (devido acessos simultâneos) ficando.. ex.. 45.csv.. caso todas as validações estejam corretas desse 45.csv é gerado um arquivo final com o conteúdo do desse 45.csv usando como nome de arquivo aquele número de cnpj que é informado na primeira página.. ficando. 67865467807654.csv

 

Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs)'Pegamos as informacoes do arquivo postado Dim infoarquivo As New IO.FileInfo(filUpload.PostedFile.FileName)Dim strCGC As String = Session("CGC")Me.lblMenssagemErro.Text = ""If filUpload.Value = "" ThenlblMenssagemErro.Text = "Favor informar um arquivo XLS clicando no botão Procurar..."End IfDim strCaminho As String'v------Criando a variável que receberá o valor da Sessão CGC criada na página anterior (default.aspx)-------vMe.lblMensagem.Text = ("Esse foi o número de CNPJ que você informou - Confira!!----> " & strCGC)Try'Verificamos se tem alguma coisa postada If Not IsNothing(filUpload.PostedFile) Then'Definimos onde ele será salvo 'strCaminho = Server.MapPath("c:/upload/" & infoarquivo.Name)strCaminho = ("c:/upload/" & infoarquivo.Name)'Me.CaminhoXLS.Text = Server.MapPath("c:/upload/" & infoarquivo.Name)Me.CaminhoXLS.Text = ("c:/upload/" & infoarquivo.Name)'Salvamos o mesmo filUpload.PostedFile.SaveAs(strCaminho)Dim ss As StringDim CalcP As BL_Excel.CalcPlanilha = NothingTryTry'... aqui informa o local da planilhass = ("c:/upload/" & infoarquivo.Name)CalcP = New BL_Excel.CalcPlanilha(ss)Catch ex As ExceptionMe.lblMensagem.Text = ("Houve um erro no acesso aos dados -- Mensagem de erro --" & ex.Message)IO.File.Delete(infoarquivo.Name)Exit SubEnd TryMe.VerificarTextBox.Text = String.Empty'======================Início das validações, chamando as funções que executam tais tarefas======================If CalcP.VerificarNascimento() And _CalcP.DeusDeAmor() And _CalcP.Data_Demissao_Menor_Admissao() And _CalcP.Valida_Sexo() And _CalcP.Admissao_Menor_Nasc() And _CalcP.Verifica_Remuneracao() And _CalcP.Verifica_Tipo3() And _CalcP.Valida_Matricula() And _CalcP.Verifica_Tipo1_Maior14() Then'======================Término das validações====================== Me.VerificarTextBox.Text = "O arquivo só será enviado quando no STATUS estiver escrito ARQUIVO ENVIADO COM SUCESSO!"Me.lblMensagem.Text = "Arquivo enviado com sucesso!"'======================Como tudo foi validado com êxito chama o Exporta CSV======================Dim intLowerBound, intUpperBound As IntegerDim recebe As StringintLowerBound = CInt(0)intUpperBound = CInt(1000)recebe = (GetRandomNumberInRange(intLowerBound, intUpperBound))PlanilhaXLS_ExportarCSV(Me.CaminhoXLS.Text, Me.CaminhoCSV.Text + recebe + ".csv")'======================Começa a Inclusão do CGC no arquivo CSV e muda seu nome para o CNPJ do Cliente======================Dim TEMP, NOVA, CGC As StringDim POS As IntegerstrCGC = Session("CGC")strCGC = strCGC.Replace(".", "").Replace("/", "").Replace("-", "")Dim LEITURA As New IO.StreamReader(("c:/upload/" + recebe + ".csv"), Encoding.GetEncoding("ISO-8859-15"))Dim GRAVACAO As New IO.StreamWriter(("c:/upload/" & strCGC & ".csv"), False, Encoding.GetEncoding("ISO-8859-15"))CGC = strCGCDim DT As Date = DateTime.TodayDim DAT As StringDAT = DT.Day.ToString.PadLeft(2, "0") + DT.Month.ToString.PadLeft(2, "0") + DT.Year.ToStringGRAVACAO.WriteLine("000;" + CGC + ";" + DAT.Replace("/", "").Replace("-", "").Replace(".", ""))DoTEMP = LEITURA.ReadLinePOS = TEMP.IndexOf(";") + 1NOVA = TEMP.Substring(0, POS).PadLeft(4, Convert.ToChar("0")) + CGC + ";" + TEMP.Substring(POS)NOVA = NOVA.Replace("/", "").Replace("-", "").Replace(".", "").Replace("'", "")GRAVACAO.WriteLine(NOVA)Loop While Not LEITURA.EndOfStreamGRAVACAO.WriteLine("002;" + "FIM")LEITURA.Close()GRAVACAO.Close()IO.File.Delete("C:/upload/" + recebe + ".csv")IO.File.Delete("C:/upload/" & infoarquivo.Name)Elsess = "Leitura do arquivo com erros..."For x As Integer = 0 To CalcP.Erros.Count - 1ss &= Environment.NewLine & CalcP.Erros(x)NextMe.VerificarTextBox.Text = ssMe.lblMenssagemErro.Text = ("Confira abaixo o motivo pelo qual o arquivo foi rejeitado.")Me.lblMensagem.Text = "Arquivo Rejeitado!"IO.File.Delete(infoarquivo.Name)End IfFinally '... garante limpesa de memóriaIf CalcP IsNot Nothing ThenCalcP.Finalize()End IfEnd TryElseMe.lblMensagem.Text = "Selecione um arquivo!"End IfCatch ex As Exception'v------------Deleta o arquivo quando der erro de conexão ou erro inesperado.IO.File.Delete(infoarquivo.Name)'Se der algum erro, exibimos a mensagem Me.lblMensagem.Text = "Há erros!. " & ex.MessageEnd TryEnd Sub

 

O está errado.. porque ele prende o arquivo quando dá erro e no re-processamento ele diz que está em uso por um outro processo?

Grata

Letícia

 

Ps. Pelas coisas que "andei" lendo tenho que fechar o objeto de leitura ou gravação do arquivo mesmo quando der os erros mas eu não sei como fazer para que isso aconteça. Para que aconteça o que acontecer o objeto fique sempre pronto para uso. será que alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

enta colocar o fechamento dentro do bloco finally, se der erro ou não sempre vai passar no finally

 

exemplo:

private void Teste()	{		try		{		}		catch (Exception ex)		{		}		finally		{		}	}

 

t+

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.