Quero listar todos os arquivos e diretórios contidos em um diretório e subdiretórios desse diretório. Se eu escolher C: \ como o diretório, o programa obterá todos os nomes de todos os arquivos e pastas do disco rígido aos quais tenha acesso.
Uma lista pode parecer
fd \ 1.txt fd \ 2.txt fd \ a \ fd \ b \ fd \ a \ 1.txt fd \ a \ 2.txt fd \ a \ a \ fd \ a \ b \ fd \ b \ 1.txt fd \ b \ 2.txt fd \ b \ a fd \ b \ b fd \ a \ a \ 1.txt fd \ a \ a \ a \ fd \ a \ b \ 1.txt fd \ a \ b \ a fd \ b \ a \ 1.txt fd \ b \ a \ a \ fd \ b \ b \ 1.txt fd \ b \ b \ a
c#
directory
subdirectory
getdirectories
derp_in_mouth
fonte
fonte
Respostas:
onde
*.*
está o padrão para combinar os arquivosSe o diretório também for necessário, você pode proceder assim:
fonte
Lsit<>
classe? O que GetFiles retorna? E os nomes dos diretórios que também foram solicitados?GetFiles
método retorna uma matriz de string.Directory.GetFileSystemEntries
existe no .NET 4.0+ e retorna arquivos e diretórios. Chame assim:Observe que não vai lidar com as tentativas de listar o conteúdo de subdiretórios aos quais você não tem acesso (UnauthorizedAccessException), mas pode ser suficiente para suas necessidades.
fonte
Use os métodos
GetDirectories
eGetFiles
para obter as pastas e arquivos.Use para obter as pastas e arquivos nas subpastas também.
SearchOption
AllDirectories
fonte
Path
oferece métodos mais confiáveis.Path
para remover uma parte esquerda fixa do caminho, por exemplo, `C:` no exemplo dado.path.SubString(2)
para remover ingenuamente a letra da unidade e dois pontos? E se o diretório for um compartilhamento de rede? Eu o sugiroPath
como um método confiável porque pode fornecer muitos benefícios nesta área. Neste caso, você pode escreverfilePath.Substring(Path.GetPathRoot(filePath).Length)
. Sim, ele usa Substring, pois é o mais conciso.fonte
Infelizmente, o
GetFiles
método retorna a lista de arquivos, mas não os diretórios. A lista da pergunta indica que o resultado também deve incluir as pastas. Se você quiser uma lista mais personalizada, pode tentar ligarGetFiles
eGetDirectories
recursivamente. Experimente isto:Dica: Você pode usar as classes
FileInfo
eDirectoryInfo
se precisar verificar algum atributo específico.fonte
Você pode usar FindFirstFile que retorna um identificador e, em seguida, chamar recursivamente uma função que chama FindNextFile. Esta é uma boa abordagem, pois a estrutura referenciada seria preenchida com vários dados, como alternativeName, lastTmeCreated, modificado, atributos etc.
Mas ao usar o framework .net, você teria que entrar na área não gerenciada.
fonte
Alguma versão melhorada com lvl máximo para descer no diretório e opção para excluir pastas:
diretório de entrada:
saída da função (o conteúdo da pasta5 é excluído devido ao limite de lvl e o conteúdo da pasta3 é excluído porque está na matriz excludedFolders):
fonte
Se você não tiver acesso a uma subpasta dentro da árvore de diretórios, Directory.GetFiles para e lança a exceção, resultando em um valor nulo na string de recebimento [].
Aqui, veja esta resposta https://stackoverflow.com/a/38959208/6310707
Ele gerencia a exceção dentro do loop e continua trabalhando até que toda a pasta seja percorrida.
fonte
a maneira lógica e ordenada:
fonte
O exemplo a seguir é a maneira mais rápida (não paralelizada) de listar arquivos e subpastas em uma árvore de diretório que trata as exceções. Seria mais rápido usar Directory.EnumerateDirectories usando SearchOption.AllDirectories para enumerar todos os diretórios, mas este método falhará se atingir UnauthorizedAccessException ou PathTooLongException.
Usa o tipo de coleção Stack genérico, que é uma pilha LIFO (last in first out) e não usa recursão. Em https://msdn.microsoft.com/en-us/library/bb513869.aspx , permite enumerar todos os subdiretórios e arquivos e lidar efetivamente com essas exceções.
fonte
Eu uso o seguinte código com um formulário que possui 2 botões, um para sair e outro para iniciar. Uma caixa de diálogo do navegador de pasta e uma caixa de diálogo para salvar arquivo. O código está listado abaixo e funciona no meu sistema Windows10 (64):
fonte
fonte
Um pouco simples e devagar, mas funcionando !! se você não fornecer um caminho de arquivo, use basicamente o "fixPath" este é apenas um exemplo .... você pode pesquisar o tipo de arquivo correto que você deseja, cometi um erro ao escolher o nome da lista porque o "TemporaryFileList é a lista de arquivos pesquisada então continue ... e o "errorList" fala por si
fonte
Criar lista de string
fonte
dir / s / b . > resultados.txt
/ s = subpastas / b = resultados do urso
fonte