Como verificar se um diretório existe em: C, C++, Python e Lua

E de bônus vamos ver o quão fácil é em outra linguagem de programação.


Como verificar se um diretório existe em: C, C++, Python e Lua

Vamos criar algumas postagens nesse sentido para notarmos e aprendermos sobre diferentes formas que cada linguagem de programação usa para fazer a mesma coisa.

Para isso precisamos obter o diretório do usuário dinamicamente para que diversos usuários possam testar somente copiando e colando o código e rodando independente do local que estiver.


Lua

Em Lua vamos importar o lfs para tornar mais fácil essa verificação. Eis o código:

nvim dir-exists.lua

require("lfs")
require("os")

function exists(path)
  if (lfs.attributes(path, "mode") == "directory") then
    return true
  end
  return false
end

home = os.getenv("HOME") .. "/"

if exists(home .. "Downloads") then
  print("Existe!")
else 
  print("Não existe.")
end


C++

Em C++ vamos utilizar a biblioteca filesystem e compilar com C++17, apesar de que ele já é padrão em todos os sistemas que estão atualizados.

nvim dir-exists.cpp

#include <iostream>
#include <filesystem>
#include <cstdlib>

bool exists( std::string path){
  return std::filesystem::exists( path );
}

int main(){
  std::string home = getenv("HOME");
  home = home + "/";
  std::cout << (exists(home + "Downloads") ? "Existe!" : "Não existe.") << '\n';
  return 0;
}

Linguagem C

No C do mesmo jeito que usamos FILE * file para manipularmos arquivos, existe o DIR * dir para diretórios, mas precisamos incluir a biblioteca dirent.h .

Outra coisa é que o tipo bool não é nativo do C, logo, precisamos também incluir stdbool.h e também:

  • stdlib.h - Que é a cstdlib usada pelo C++ .
  • string.h - Para usarmos o strcat sem warning para concatenarmos string sem precisar alocar memória com malloc.

Observação: Na função do tipo bool tive que fazer if .. else porque precisamos fechar o diretório: closedir() então só retornar não iria ser tão óbvio.

nvim dir-exists.c

#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

bool exists( const char * home ){
  DIR * path = opendir( home ); 
  if( path ){
    closedir( path );
    return true;
  }else{
    return false;
  }
}

int main(){
  char * home = getenv("HOME");
  const char * dir = "/Downloads";
  strcat(home,dir);
  exists( home ) ? printf("Existe!\n") : printf("Não existe.\n");
  return 0;
}

Compile: gcc dir-exists.c && ./a.out


Python

Em Python talvez seja a forma mais fácil, só perde para o BASH .

nvim dir-exists.py

import os

def dir_exists(path):
  return os.path.isdir(path)

home = os.path.expanduser('~') + "/"

if dir_exists( home + "Downloads" ):
    print("Existe!")
else:
    print("Não existe.")

python dir-exists.py


Simples, né?! E por falar em simplicidade, só por curiosidade em Shell Script é assim:

nvim dir-exists.sh

#!/bin/bash
[[ -d $HOME"/Downloads" ]] && \
  echo "Existe!" || echo "Não existe."

Moleza, né?!

Se inscrevam no newsletter, vamos ter mais artigos nesse sentido de “comparativo” que ficam mais fácil de ir pegando “as manha”.

Falou!!!


langs linguagemc cpp lua python


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!