-2

Estou fazendo um mini programazinho em console com c++. Em fim estou precisando de saber se uma pasta especifica está vazia ou contem ficheiros cpp\c++.

Obrigado desde já por toda a ajuda.

1 Resposta 1

0

O exemplo abaixo --- f1-1216 --- tem o mínimo do que precisa. Compile com ao menos C++17 e se usa o compilador da Microsoft use /Za por causa do not

Saída do exemplo

 C:\TEMP> tree . /F
Listagem de caminhos de pasta
O número de série do volume é 0000006C 7E52:1BF2
C:\TEMP
│   cmake_install.cmake
│   f1-1216.exe
│   f1-1216.ilk
│   f1-1216.pdb
│   vc140.pdb
│
└───CMakeFiles
    └───f1-1216.dir
            embed.manifest
            f1.cpp.obj
            intermediate.manifest
            manifest.rc
            manifest.res
            vc140.pdb

PS C:\TEMP> ./f1-1216 CMakeFiles
Usando "CMakeFiles"
Diretorio corrente: "C:\\TEMP"

        Na pasta:

"CMakeFiles\\f1-1216.dir"       [diretorio]
PS C:\TEMP> ./f1-1216
Usando "."
Diretorio corrente: "C:\\TEMP"

        Na pasta:

".\\CMakeFiles" [diretorio]
".\\cmake_install.cmake"        [arquivo comum]
".\\f1-1216.exe"        [arquivo comum]
".\\f1-1216.ilk"        [arquivo comum]
".\\f1-1216.pdb"        [arquivo comum]
".\\vc140.pdb"  [arquivo comum]
PS C:\TEMP>

Dentro da pasta TEMP tem alguns arquivos e outra pasta, CMakeFiles. O programa aceita um argumento na linha de comando, obviamente a pasta. Se não receber nenhum considera o diretório corrente, ".".

  • Se o argumento corresponder a um diretório o programa testa se ele está vazio
  • Se não está vazio lista os arquivos e o tipo --- apenas diretório/não-diretório.

O código

#include <filesystem>
#include <iostream>

int main(int argc, char** argv)
{
    namespace sa = std::filesystem; // sistema de arquivos
    sa::path dir{"."};
    if (argc > 1) dir = argv[1]; // se veio uma pasta
    std::cout << "Usando " << dir << "\n";
    std::cout << "Diretorio corrente: " << sa::current_path() << "\n";
    // encerra se nao for um diretorio
    if (not sa::is_directory(dir))
    {
        std::cout << "    NAO e' um diretorio\n";
        return -1;
    }
    // diretorio: esta vazio?
    if (sa::is_empty(dir))
    {
        std::cout << "    diretorio vazio!\n";
        return 0;
    }
    // diretorio nao vazio: lista o conteudo
    const char* tipo[] = {"arquivo comum", "diretorio"};
    std::cout << "\n\tNa pasta:\n\n";
    for (auto const& arq : sa::directory_iterator{dir})
        std::cout << arq << 
        "\t[" << tipo[sa::is_directory(arq)] << "]\n";
    return 0;
}

Você deve fazer log-in para responder a esta pergunta.

Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag .