Ir ao conteúdo

Posts recomendados

Postado

Boa tarde, não possuo conhecimento nessa área de programação, e pode ser por isso que não consegui encontrar nenhum material do assunto que quero.

 

Eu estou tentando encontrar algum material que explica, e ensina como criar uma programação em C++, que copie uma pasta, e pode renomear.

 

O objetivo dessa programação é copiar uma pasta modelo que tem subpasta nela, copiando a pasta modelo, em no minimo 30 copias, e cada copia ser renomeada com os dias de um mês, como 12.08.2019 e assim vai, porém os arquivos que estão na pasta modelo tem que está em todas essas cópias.

 

Alguém tem algum material ou vídeo que explique como fazer? Tudo que encontrei é ensinando com arquivo com extensão, e quando tentei modificar para o que preciso, não funcionava, não possuo conhecimento algum na área.

 

Obrigada pela atenção e boa tarde.

Postado

A versão C++17 da norma do C++ incluiu na linguagem a biblioteca padrão <filesystem> para lidar com sistemas de arquivos, e oficialmente deve usar std::filesystem::copy para copiar diretórios e arquivos.

 

https://en.cppreference.com/w/cpp/filesystem/copy

 

E no seu caso usaria assim:

std::filesystem::copy("/dir1", "/dir3", std::filesystem::copy_options::recursive);

Ou seja, setando a flag das opções de cópia como recursivo, para copiar o diretório dir1 e todo seu conteúdo, incluindo as subpastas, para o dir3 (também cria o dir3 caso não exista).

 

 

O problema é que isso é algo relativamente novo, ainda sendo implementado nas versões mais recentes dos compiladores, então dependendo do compilador que você está usando, e de sua versão, ainda há algumas inconsistências, e o modo de uso pode variar um pouco de um para o outro.

 

No MSVC (microsoft) por exemplo a biblioteca filesystem ainda consta como experimental, então precisa usar a biblioteca <experimental/filesystem> e std::experimental::filesystem , isso porque na versão C++14 da norma ela já constava como experimental, mas o MSVC ainda não se adaptou a C++17 completamente. (O mesmo é válido para o GCC com flag -std=c++14 .)

 

Já no GCC com flag -std=c++17, pode usar a bibliteca normalmente sem "experimental", mas para versões do GCC anteriores ao GCC 9 também é necessário linkar a biblioteca usando -lstdc++fs, mas a partir do GCC 9 não é mais necessário.

 

 

E para usar filesystem em versões anteriores da linguagem é necessário usar a biblioteca não padrão Boost, que é uma biblioteca onde muitos recursos extras para a linguagem são implementados, sendo que alguns, como aconteceu com a biblioteca filesystem, podem acabar sendo adicionados como parte da biblioteca padrão do C++ em versões futuras da norma da linguagem. (Note que também poderia usar filesystem do Boost nas versões mais recentes da linguagem, então é uma outra alternativa.)

 

 

Também existem outras opções, como a biblioteca não padrão dirent.h que também está disponível em vários Sistemas Operacionais, ou no caso específico do Windows também poderia usar os recursos da Win32API (windows.h).

 

 

Outros links relevantes:

https://stackoverflow.com/questions/33149878/experimentalfilesystem-linker-error

https://www.boost.org/

https://stackoverflow.com/questions/19944753/linking-compiling-a-program-that-uses-boost-filesystem-hpp

  • Curtir 1
  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...