EXCESSÃO C# NÃO CONSIGO INTERCEPTAR CORRETAMENTE

 Tópico anterior Próximo tópico Novo tópico

EXCESSÃO C# NÃO CONSIGO INTERCEPTAR CORRETAMENTE

C#

 Compartilhe  Compartilhe  Compartilhe
#477241 - 19/10/2017 10:17:15

LUIS HERRERA
NOVA ODESSA
Cadast. em:Julho/2005


 Anexos estao visíveis somente para usuários registrados

Bom dia!
Estou fazendo um System.IO.FileStream para abrir um arquivo e gerar um ZIP. Tudo funciona bem até tentar abrir o arquivo que já está aberto pelo Word ou seu programa de origem.

Nota: a imagem anexa apresenta acima o erro no Debug que não consigo interceptar corretamente, como explico abaixo. Já a imagem abaixo, é o erro gerado pelo Word quando meu aplicativo tenta abrir o Doc. Também não consigo evitar isso, pois a cada tentativa, um novo aviso do Word é sobreposto e pode ficar vários abertos sucessivamente, dando muito trabalho ao usuário para fechar tudo.

Meu Try está pegando, mas somente no Exception (genérico), nenhum outro tipo consegue identificar, assim como não consigo pegar exatamente o erro de abertura por outro processo, não tenho como exibir essa mensagem ao usuário, pois o erro pode ser outro.

A única coisa que identifico no Debug é o código de erro -532459699, porem o Exception não possui a propriedade Error em sua variável e esse código está associado a _COMPlusExceptionCode uma propriedade NÃO PUBLICA.

Agradeço se alguém souber como resolver isso.

Meu código:


try
{
       //Códido inicial ......

       try
       {
             using (FileStream objStreamDestino = new FileStream(myCaminhoNomeArquivoDestino, FileMode.Create, FileAccess.Write))
            {
                   //Arquivo que será compactado
                  using (FileStream arquivo = new FileStream(myCaminhoNomeArquivoOrigem, FileMode.Open, FileAccess.Read)) //AQUI GERA O ERRO SE ARQUIVO JÀ ABERTO
                  {
                         ZipOutputStream objZipDestino = new ZipOutputStream(objStreamDestino);
                         // continuação do meu código ......

                         arquivo.Close();
                         arquivo.Dispose();
                         objZipDestino.Close();
                         objZipDestino.Dispose();
                  }
                  //fechando as comunicações.                            
                  objStreamDestino.Close();
                  objStreamDestino.Dispose();  
            }
      }
      catch (InvalidDataException)
      {
                    MessageBox.Show("ExceptionDadosInvalidos");
      }
      catch (FileLoadException)
      {
                    MessageBox.Show("ExceptionArquivoAbertoOutroProcesso");
      }
      catch (FileNotFoundException)
      {
                    MessageBox.Show("ExceptionArquivoNaoEncontrado";
      }
      catch (ArgumentException)
      {
                    MessageBox.Show("ExceptionArgumento");
      }
      catch (PathTooLongException)
      {
                    MessageBox.Show("ExceptionCaminhoGrande");
      }
      catch (DirectoryNotFoundException)
      {
                    MessageBox.Show("ExceptionPastaNaoExiste");
      }
      catch (IOException)
      {
                    MessageBox.Show("Exception_IO");
      }
      catch (UnauthorizedAccessException)
      {
                    MessageBox.Show("ExceptionAcessoNegado");
      }
      catch (IndexOutOfRangeException)
      {
                    MessageBox.Show("ExceptionFaixaParametros");
      }
      catch (OutOfMemoryException)
      {
                    MessageBox.Show("Memória ou espaço em disco cheio, operação não pode ser concluída.");
      }
}
catch (Exception) //o erro CAI SEMPRE AQUI, veja imagem com código
{
                throw;
}
finally
{
                //tentar evitar o erro de System.OutOfMemoryException ocorrido em um cliente
                GC.WaitForPendingFinalizers();
}
  


LH
Preserve a Natureza
Faça Coleta Seletiva e Cuide da Fauna e Flora por onde passa ou vive.
Dedique um tempo ao seu espírito, mente sã e corpo são.
Você e sua famí­lia serão os maiores beneficiado.

Resposta escolhida #477242 - 19/10/2017 10:55:12

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Primeiro, se está usando blocos "using", você não precisa dos comandos de close e dispose.
Segundo, verifique se o arquivo está aberto.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#477244 - 19/10/2017 11:23:50

LUIS HERRERA
NOVA ODESSA
Cadast. em:Julho/2005


Última edição em 19/10/2017 12:11:03 por LUIS HERRERA

Kerplunk bom dia!
Sobre fechar os objetos no Using eu não fazia, mas como estava gerando estouro de memória em alguns clientes, decidi forçar para tentar evitar, pois o Garbage poderia estar demorando para limpar tudo. Não sei se há outras formas, mas ocorre erros específicos em certos clientes que fica muito difícil saber o motivo.

Sobre verificar se o arquivo está aberto, em sistemas de grande concorrência pode acontecer de na fração de segundos entre o teste e a abertura do arquivo, um outro processo abra o arquivo primeiro e o erro irá ocorrer da mesma forma, Isso que constatei em alguns foruns. Porém se não há solução melhor por enquanto, eu acabei de implementar isso, assim devo reduzir bastante a incidência do problema.

Já a questão da mensagem exibida pelo Word, você tem alguma ideia de como evitar esse problema?.



LH
Preserve a Natureza
Faça Coleta Seletiva e Cuide da Fauna e Flora por onde passa ou vive.
Dedique um tempo ao seu espírito, mente sã e corpo são.
Você e sua famí­lia serão os maiores beneficiado.

#477250 - 19/10/2017 13:31:13

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Uma idéia é trabalhar com arquivos temporários copiando o arquivo antes de abrir.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#477252 - 19/10/2017 14:21:13

LUIS HERRERA
NOVA ODESSA
Cadast. em:Julho/2005


Boa ideia, acho que irá resolver mesmo. Obrigado.

LH
Preserve a Natureza
Faça Coleta Seletiva e Cuide da Fauna e Flora por onde passa ou vive.
Dedique um tempo ao seu espírito, mente sã e corpo são.
Você e sua famí­lia serão os maiores beneficiado.

 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por LUIS HERRERA em 19/10/2017 14:21:26