Como obter o conteúdo de um diretório no c ++
Se você quiser ler o conteúdo de um diretório, você realmente vai contra o que está disponível no idioma padrão C ++. No entanto, os Souls tipo de grandes bibliotecas de C ++ (isto é, as pessoas que escreveram a maioria das bibliotecas disponíveis C ++) geralmente construídas em algumas funções úteis para obter o conteúdo de um diretório.
Conteúdo
- Video: como resolver erro, acesso negado você precisará fornecer permissão de administrador
- Video: como transferir memória do drive c: para o d: ou vice-versa
- Video: video aula 4 - ms dos - listando conteudo do diretório como comando "dir"
- Video: (soluÇÃo) como remover permissÕes de arquivos - quando arquivos nÃo abrem ou nÃo excluem
Um diretório geralmente contém vários arquivos, bem como outros diretórios. Obtendo uma lista de conteúdo está envolvido. Você não pode simplesmente chamar uma função e receber algo de volta.
Claro, se a biblioteca padrão C ++ incluída uma função para obter informações, provavelmente seria uma classe de modelo que contém o conteúdo do diretório. Infelizmente, a biblioteca não apoiá-lo. Em vez disso, você tem que subir através de algumas funções. Veja como ele funciona.
Video: Como resolver erro, ACESSO NEGADO Você precisará fornecer permissão de administrador
Ligar _findfirst (), passando um caminho e um padrão para os arquivos cujos nomes você deseja encontrar.
Video: Como transferir memória do drive C: para o D: ou vice-versa
Por exemplo, passar *. * para obter todos os arquivos no diretório, ou *.TXT para obter todos os arquivos terminando em .TXT. Também passá-lo um ponteiro para uma _finddata_t estrutura.
Verificar os resultados da _findfirst ().
Video: Video Aula 4 - MS DOS - Listando conteudo do diretório como comando "DIR"
E se _findfirst () devolvida -1, não encontrar todos os arquivos (o que significa que você está acabado). Caso contrário, ele preenche o _finddata_t estrutura com o primeiro arquivo que ele encontrou, e ele irá retornar um número que você usar em chamadas subseqüentes para as várias funções Localizar.
Olhe para a _finddata_t estrutura para determinar o nome do arquivo, e outras informações, como data de criação, data do último acesso, e tamanho.
Ligar _encontre o próximo() e passá-lo os seguintes valores: o número retornado de _findfirst () e o endereço de uma _finddata_t estrutura
E se _encontre o próximo() retornos -1, ele não encontrou mais Arquivos- você pode ir para a etapa 5. Caso contrário, olhar para o _finddata_t estrutura para obter as informações para o próximo arquivo encontrado. Em seguida, repita o Passo 4.
Ligar _findclose () e passá-lo o número retornado de _findfirst ().
Você está tudo acabado.
Youch! Isso é meio bizarro, mas é a maneira como as coisas costumavam ser feito nos velhos dias de programação, antes de as línguas tradicionais desenvolveram tais características civilizadas como classes e objetos.
Video: (SOLUÇÃO) COMO REMOVER PERMISSÕES DE ARQUIVOS - QUANDO ARQUIVOS NÃO ABREM OU NÃO EXCLUEM
o GetDirectoryContents exemplo mostra como implementar isso, o processo antiquado elegante.
#incluir#include #include #include using namespace std-string Pique (string &str) {res string = str-int len = str.length () - se (str [len - 1] == `R`) {res.replace (len - 1, 1, ") -} len = str.length () - se (str [len - 1] == `n`) {res.replace (len - 1, 1, ") -} return res-} DumpEntry void (_finddata_t &dados) {CreateTime string (ctime (&data.time_create)) - cout lt; lt; Costeleta (CreateTime) lt; lt; "t"-cout lt; lt; data.size lt; lt; "t"-se ((data.attrib & _A_SUBDIR) == _A_SUBDIR) {cout lt; lt; "[" lt; lt; data.name lt; lt; "]" lt; lt; endl-} else {cout lt; lt; data.name lt; lt; endl -}} int main () {_ dados int finddata_t ff = _findfirst ("../*.*", &de dados) -se (ff! = -1) {int res = 0 while (-res! = -1) {DumpEntry (dados) -Res = _findnext (FF, &dados) -} _ FindClose (ff) -} retornar 0-}
Você pode ver como a Principal()segue apenas as etapas delineadas. E para cada uma das estruturas de dados, a função chamada DumpEntry () foi usado. o DumpEntry () função imprime as informações sobre o arquivo. Aqui está o que você deve ver quando você executar o aplicativo (a entrada de diretório atual, a entrada diretório pai, e os quatro diretórios que contêm outros exemplos):
Sun 15 dez 19:40:00 20130 [.] Sol 15 dez 19:40:00 20130 [..] Sol 15 dez 19:40:00 20130 [deleteDirectory] Sol 15 dez 19:40:00 20130 [GetDirectoryContents] sol 15 de dezembro 19:40:00 20130 [MaKeDIRectory] Sun 15 de dezembro 19:40:00 20130 [RenameFile]
Note como, no DumpEntry () função, você está testando se o item é um diretório. Esta é outra maneira de idade (mas de confiança) para o programa: Verificar a presença de um minúsculo pouco particular no meio da attrib membro da estrutura, como este:
if (data.attrib & _A_SUBDIR == _A_SUBDIR) {cout lt; lt; "[" lt; lt; data.name lt; lt; "]" lt; lt; endl-}
E, finalmente, você vai notar uma função estranha incluído chamada CHOP (). Isso porque o ctime () função - caso contrário útil para formatar o tempo - acrescenta um retorno de carro (ou nova linha) Ao final da cadeia que ele cria. Então cortar isso fora. Caso contrário, a informação após a data tem que começar na próxima linha de texto, o que não era desejado.