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.
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
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;
}
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 fazerif .. 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
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!!!