none
Criar e Deletar Arquivo RRS feed

  • Pergunta

  • Bom Dia Prezados,

     

           Eu tenho um relatório no ReportViewer que preciso enviar o mesmo por e-mail então gero um arquivo pdf no servidor anexo o mesmo no e-mail e envio o arquivo mas quando tendo apagar o arquivo não consigo por o arquivo ainda está sendo utilizado por outro processo, não sei mais o que fazer fecho o arquivo , coloquei null no objeto e nada alguém pode me ajudar , desde já agradeço a atenção de todos.

    abaixo o código fonte:

    byte[] bytes = ReportViewer1.LocalReport.Render("PDF",
                                                                        null,
                                                                        out mimeType,
                                                                        out encoding,
                                                                        out extension,
                                                                        out streamids,
                                                                        out warnings);
                        FileStream fs = new FileStream(@"" + cDiretorioDestino + "\\Certificado.pdf", FileMode.Create,FileAccess.Write);
                        fs.Write(bytes, 0, bytes.Length);
                        fs.Close();
                        fs = null;

    EnviarEMail();

     File.Delete( cDiretorioDestino + "\\Certificado.pdf");

     

     

    terça-feira, 11 de outubro de 2011 14:24

Respostas

  • Vamos supor que o processo que esteja usando o arquivo seja o notepad

    Faça o seguinte codigo:

                Process[] prcList  = Process.GetProcesses();
    
                foreach (Process p in prcList)
                {
                    if (p.ProcessName == "notepad")
                    {
                        p.Kill();
                    }
                }
    



    Se a minha resposta lhe foi util, marque "Propor como Proposta" para qualificar o conteudo do fórum. Obrigado, Vinicius Nunes Macedo
    terça-feira, 11 de outubro de 2011 15:03
  • Eliabe,

    Talvez o seu servidor SMTP ainda não tenha enviado o e-mail e esteja "prendendo" o arquivo... se você tentar apagá-lo dessa mesma forma depois de algum tempo, dá o mesmo problema?

    Uma sugestão: Utilize o método Dispose() no seu Filestream ou utilize um bloco using:

    using(FileStream fs = new FileStream(@"" + cDiretorioDestino + "\\Certificado.pdf", FileMode.Create,FileAccess.Write){
         fs.Write(bytes, 0, bytes.Length);
         fs.Close();
    }
    


    terça-feira, 11 de outubro de 2011 21:17
  • Eliabe,

     Talvez o seu servidor SMTP ainda não tenha enviado o e-mail e esteja "prendendo" o arquivo... se você tentar apagá-lo dessa mesma forma depois de algum tempo, dá o mesmo problema?

    Uma sugestão: Utilize o método Dispose() no seu Filestream ou utilize um bloco using:

     

    using(FileStream fs = new FileStream(@"" + cDiretorioDestino + "\\Certificado.pdf", FileMode.Create,FileAccess.Write){
         fs.Write(bytes, 0, bytes.Length);
         fs.Close();
    }
    


     

    Eu acredito que possa ser isso, Eliabe, tente utilizar e-mail assíncrono: http://wiki.asp.net/page.aspx/536/send-asynchronous-mail-using-aspnet/

    Veja se o problema persiste, se persistir, poste novamente :)

    quinta-feira, 13 de outubro de 2011 11:48

Todas as Respostas

  • Vamos supor que o processo que esteja usando o arquivo seja o notepad

    Faça o seguinte codigo:

                Process[] prcList  = Process.GetProcesses();
    
                foreach (Process p in prcList)
                {
                    if (p.ProcessName == "notepad")
                    {
                        p.Kill();
                    }
                }
    



    Se a minha resposta lhe foi util, marque "Propor como Proposta" para qualificar o conteudo do fórum. Obrigado, Vinicius Nunes Macedo
    terça-feira, 11 de outubro de 2011 15:03
  • Eliabe,

    Talvez o seu servidor SMTP ainda não tenha enviado o e-mail e esteja "prendendo" o arquivo... se você tentar apagá-lo dessa mesma forma depois de algum tempo, dá o mesmo problema?

    Uma sugestão: Utilize o método Dispose() no seu Filestream ou utilize um bloco using:

    using(FileStream fs = new FileStream(@"" + cDiretorioDestino + "\\Certificado.pdf", FileMode.Create,FileAccess.Write){
         fs.Write(bytes, 0, bytes.Length);
         fs.Close();
    }
    


    terça-feira, 11 de outubro de 2011 21:17
  • Eliabe,

     Talvez o seu servidor SMTP ainda não tenha enviado o e-mail e esteja "prendendo" o arquivo... se você tentar apagá-lo dessa mesma forma depois de algum tempo, dá o mesmo problema?

    Uma sugestão: Utilize o método Dispose() no seu Filestream ou utilize um bloco using:

     

    using(FileStream fs = new FileStream(@"" + cDiretorioDestino + "\\Certificado.pdf", FileMode.Create,FileAccess.Write){
         fs.Write(bytes, 0, bytes.Length);
         fs.Close();
    }
    


     

    Eu acredito que possa ser isso, Eliabe, tente utilizar e-mail assíncrono: http://wiki.asp.net/page.aspx/536/send-asynchronous-mail-using-aspnet/

    Veja se o problema persiste, se persistir, poste novamente :)

    quinta-feira, 13 de outubro de 2011 11:48