none
Verificar se é arquivo ou pasta RRS feed

  • Pergunta

  • Pessoal, boa tarde!

    Estou com um problema, preciso através de um path, descobrir se esse caminho se refere a um arquivo ou uma pasta, como posso fazer isso? Alguém poderia me ajudar?

    Abraços e agradeço desde já!


    quinta-feira, 12 de novembro de 2009 15:10

Respostas

  • Boa tarde Edinator.

    Eu não conheço algo que indique isso diretamente. Dessa forma, para solucionar o seu problema eu faria o seguinte:

    1 - Verifico se o path é relacionado a um diretório

    2 - Se não for um diretório, verifico se é um arquivo

    3 - Se não for um arquivo, eu sei que o path informado é inexistente.

    Eu criei uma Console Application que segue esses três passos.

    static void Main(string[] args)
    {
       String caminho = @"c:\a.txt";            
    
       //Verifica se é um diretório
       if (Directory.Exists(caminho))
       {
          Console.WriteLine("Diretório");
          Console.Read();
          return;
       }
    
       //Verifica se é um arquivo
       if (File.Exists(caminho))
       {
          Console.WriteLine("Arquivo");
          Console.Read();
          return;
       }
    
       //Caminho não encontrado
       Console.WriteLine("caminho inexistente");
       Console.Read();
    }

    Abraço.
    • Marcado como Resposta Edinator sexta-feira, 13 de novembro de 2009 10:47
    quinta-feira, 12 de novembro de 2009 15:34

Todas as Respostas

  • Boa tarde Edinator.

    Eu não conheço algo que indique isso diretamente. Dessa forma, para solucionar o seu problema eu faria o seguinte:

    1 - Verifico se o path é relacionado a um diretório

    2 - Se não for um diretório, verifico se é um arquivo

    3 - Se não for um arquivo, eu sei que o path informado é inexistente.

    Eu criei uma Console Application que segue esses três passos.

    static void Main(string[] args)
    {
       String caminho = @"c:\a.txt";            
    
       //Verifica se é um diretório
       if (Directory.Exists(caminho))
       {
          Console.WriteLine("Diretório");
          Console.Read();
          return;
       }
    
       //Verifica se é um arquivo
       if (File.Exists(caminho))
       {
          Console.WriteLine("Arquivo");
          Console.Read();
          return;
       }
    
       //Caminho não encontrado
       Console.WriteLine("caminho inexistente");
       Console.Read();
    }

    Abraço.
    • Marcado como Resposta Edinator sexta-feira, 13 de novembro de 2009 10:47
    quinta-feira, 12 de novembro de 2009 15:34
  • Edinator,

    Você pode utilizar o seguinte método:

    System.IO.Path.HasExtension(String path)

    Esse método retornará true caso o caminho passado contiver uma extensão, ou seja, quando o path for de um arquivo.
    Contudo, ele retornará false não só para diretórios, mas também para arquivos que não contenham extensão.

    Espero ter ajudado.
    Abraço

    quinta-feira, 12 de novembro de 2009 16:46
  • Cleverson, boa tarde.

    Então, eu até tinha pensado nisso em primeiro quando eu li essa Thread, mas como é possível ter um arquivo sem extensão alguma, isso pode ser perigoso.

    O método HasExtension não verifica a existência de um arquivo em disco.

    Se eu fizer por exemplo:

    String caminho = @"abcd.efg";
    Console.WriteLine(Path.HasExtension(caminho));

    Esse método retorna true, mesmo esse arquivo não existindo em disco.

    E se no lugar eu passar simplesmente "abcd", ele retornará false por não ter nenhuma extensão, mesmo eu querendo um arquivo que não tenha extensão. Embora isso não faça muito sentido, devemos evitar certas coisas, pois não sabemos a intenção da pessoa que opera o aplicativo.

    Abraço.
    quinta-feira, 12 de novembro de 2009 18:21
  • Leandro,

    Você tem toda a razão.
    Eu apenas postei esse código levando ao pé da letra a questão colocada pelo Edinator, pois ele não citou verificação da existência do arquivo, apenas a identificação.
    Porém, se eu tivesse a necessidade de uma forma mais completa, certamente utilizaria a que você postou anteriormente.

    Abraço
    quinta-feira, 12 de novembro de 2009 18:40
  • Edinator,

    Para verificar se um caminho é um arquivo ou pasta, utilize o código abaixo:

    // caminho
    string path = @"c:\temp\overview_map.png";

    // atributos
    FileAttributes fa = File.GetAttributes(path);

    // verifica se é uma pasta ou arquivo
    if ((fa & FileAttributes.Directory) == FileAttributes.Directory)
        Console.WriteLine("{0} é uma pasta.", path);
    else
        Console.WriteLine("{0} é um arquivo.", path);


    Obs: Esse código não verifica se o caminho é válido.

    Att.

    Ari C. Raimundo
    • Sugerido como Resposta JobaDiniz terça-feira, 24 de novembro de 2009 00:09
    sexta-feira, 13 de novembro de 2009 00:47
    Moderador
  • Pessoal, bom dia!

    Obrigado pelas respostas!

    Por uma falha minha, esqueci de informar que precisaria verificar arquivos sem extensão tbm, então a resposta que o Leandro mencionou foi a que me ajudou a resolver a questão.


    Muito obrigado mesmo e estou a disposição se precisarem!


    Um grande abraço!

    Fuiiiiiiiiiiii...
    sexta-feira, 13 de novembro de 2009 10:58