none
FileInfo.Exist retornando sempre false RRS feed

  • Pergunta

  • Olá a todos !

     

    Devido a algumas inconsistencias no banco de dados da nossa aplicação esta sendo necessário verificar a existencia de todos arquivos que tem o caminho registrado no banco. Porem todos os arquivos que são testados com FileInfo.Exist são retornados false, alguns eu já comparei na mão e realmente existem.

     

    Existe algo que possa fazer essa propriedade retornar ese falso negativo ?

     

    Obrigado a todos pela atenção

    quarta-feira, 17 de novembro de 2010 19:38

Respostas

  • Pessoal,

     

    Resolvi aqui, era viagem minha ...

    Tava tentando comparar os arquivos que não estavam na minha maquina, então ele nunca ia achar mesmo.

    Mandei pro servidor, onde os arquivos estão, e rodando de la tudo funcionou corretamente.

     

    Mais uma vez, o meu muito obrigado !

    • Marcado como Resposta Thiago Bernabé terça-feira, 23 de novembro de 2010 18:50
    terça-feira, 23 de novembro de 2010 18:49

Todas as Respostas

  • É praticamente certeza que o caminho físico informado está incorreto.

    Poste o seu código e o valor que esta sendo recebido pela função para verificarmos.


    Tornar o simples complicado é facil, tornar o complicado simples é criatividade, vontade e conhecimento
    quarta-feira, 17 de novembro de 2010 19:48
  • Abstraindo os detalhes de consulta no banco:
    foreach (DataRow item in ds.Tables[0].Rows)
          {
            arquivo = new FileInfo(String.Concat(Utilities.Caminho, PASTA, item["nomeArquivo"].ToString()));
    
            if (arquivo.Exists)
              Existem += 1;
            else
              NaoExistem += 1;
          }
    

    Onde: Utilities.Caminho = "E:/home/empresa/siga/web/Uploads/"

    PASTA = "ComunicacaoVenda/"

    quarta-feira, 17 de novembro de 2010 19:54
  • foreach (DataRow item in ds.Tables[0].Rows)
       {
        string caminho = String.Concat(Utilities.Caminho, PASTA, item["nomeArquivo"].ToString());
    
        if (File.Exists(caminho))
         Existem += 1;
        else
         NaoExistem += 1;
       }
    
    
    Veja se funciona agora!
    Tornar o simples complicado é facil, tornar o complicado simples é criatividade, vontade e conhecimento
    quarta-feira, 17 de novembro de 2010 20:04
  • Thiago,

    Sugiro que você utilize o Path.Combine ao invés do String.Concat... Dessa forma, se tiver alguma barra faltando, o Path.Combine vai entender, enquanto o String.Concat não vai...

    http://msdn.microsoft.com/en-us/library/dd784047.aspx


    André Alves de Lima
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    quarta-feira, 17 de novembro de 2010 20:17
    Moderador
  • Pessoal,

     

    Primeiramente, perdão pela demora !

    Tentei as dicas passadas por vocês, mas mesmo assim não tive sucesso ..

     

    Será que isso pode ser algum problema de permissão ?

    Nessa pasta tenho permissão inclusive de fazer uploads, então imagino que não seja.

     

    Alguem tem mais alguma sugestão ?

    segunda-feira, 22 de novembro de 2010 20:43
  • Olá, tem certeza que o caminho está correto?

     

    Se fosse problema de permissão iria disparar um exceção em vez de retornar false.

     

    Para a realização de um teste simples, considerando os exemplos acima, sugiro que capture o valor da variavel "caminho" (que é resultado da concatenação do caminho da pasta com o nome do arquivo) através de um break point ou simplesmente imprima esta variavel na tela, copie o valor e tente acessar o mesmo caminho através do Windows Explorer.


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP - Twitter: @mpghelli
    segunda-feira, 22 de novembro de 2010 21:22
  • imagino que o erro esta aqui:

     

    Onde: Utilities.Caminho = "E:/home/empresa/siga/web/Uploads/"

    PASTA = "ComunicacaoVenda/"

     

    na verdade vc ta usando a barra errada o certo seria:

     

    Onde: Utilities.Caminho = "E:\home\empresa\siga\web\Uploads\"

    PASTA = "ComunicacaoVenda\"

     

     


    Eu não sou pago para postar aqui... faço simplesmente porque eu quero....
    segunda-feira, 22 de novembro de 2010 22:55
    Moderador
  • Muito bem observado... :)
    André Alves de Lima
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    segunda-feira, 22 de novembro de 2010 23:02
    Moderador
  • Pessoal,

     

    Vou pegar como exemplo o primeiro resultado que retorna:

    E:/home/empresa/siga/web/Uploads/ComunicacaoVenda/20101119102025_fwd_res_res_obrigatoriedades_do_conciege_-_pes_aprovacao_camera,_servidor_e_panico.txt

     

    Como a aplicação fica hospedada na UOL Host, não tenho como acessar direto do Windows Explorer.

    Vou mostrar no FTP

    http://yfrog.com/09arquivoyp

     

    O meu medo é ser algum bloqueio da UOL Host ...

     

    Obrigado a todos pela atenção !!

     

    terça-feira, 23 de novembro de 2010 15:36
  • Então Thiago...

        O seu programa de FTP esta mostrando o caminho como "E:/home/empresa/siga/..." porque foi assim que ele foi desenvolvido... na verdade esse tipo de notação é usada em sistemas unix do qual deve ter sido feito originalmente....

        Em servidores Windows e principalmente no ambiente .NET a notação de arquivos obrigatoriamente tem que ser usando a contra-barra... o caminho correto do seu arquivo é:

    E:\home\empresa\siga\web\Uploads\ComunicacaoVenda\20101119102025_fwd_res_res_obrigatoriedades_do_conciege_-_pes_aprovacao_camera,_servidor_e_panico.txt

    Esperimente fazer um teste usando desta forma....


    Eu não sou pago para postar aqui... faço simplesmente porque eu quero....
    terça-feira, 23 de novembro de 2010 16:53
    Moderador
  • Fala Rui !

     

    Criei um replace para inverter as barras e mesmo assim não funcionou. :S

    arquivo = Path.Combine(Path.Combine(Utilities.Caminho, PASTA), item["nomeArquivo"].ToString());
    arquivo = arquivo.Replace(@"/", @"\");
    
       if (File.Exists(arquivo))
         Existem += 1;
       else
         NaoExistem += 1;
    

     

    Já estou ficando completamente sem ideias ...

    terça-feira, 23 de novembro de 2010 17:16
  • Pessoal,

     

    Resolvi aqui, era viagem minha ...

    Tava tentando comparar os arquivos que não estavam na minha maquina, então ele nunca ia achar mesmo.

    Mandei pro servidor, onde os arquivos estão, e rodando de la tudo funcionou corretamente.

     

    Mais uma vez, o meu muito obrigado !

    • Marcado como Resposta Thiago Bernabé terça-feira, 23 de novembro de 2010 18:50
    terça-feira, 23 de novembro de 2010 18:49