Usuário com melhor resposta
Ajuda !!

Pergunta
-
Preciso de uma ajuda, estou programando um verificador de pastas.
Ele precisa pegar um caminho que vou especificar e verificar todas as pastas.
EX:
D:\\PastaPrincipal\\ e listar todas as pastas e verifica-las
EX:
D:\\PastaPrincipal\\01\\PastaExemplo
D:\\PastaPrincipal\\01\\PastaExemplo02 e verificar se dentro desse diretorio existe uma pasta, se existir ele não retorna nada, já se não existir ele apaga a pasta;
e assim por diante com as pastas
D:\\PastaPrincipal\\02\\PastaExemplo
D:\\PastaPrincipal\\02\\PastaExemplo02
Meu codigo é esse:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace Verificador { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string caminho,caminhosub,caminhosub2,caminhosub3; int contdir,contsub,contsub4; bool existeDiretorio, existesubDiretorio, existesubDiretorio2; private void button1_Click(object sender, EventArgs e) { folderBrowserDialog1.ShowDialog(); caminho = folderBrowserDialog1.SelectedPath; textBox1.Text = caminho; listardiretorio01(); } private void listardiretorio01() { // Vai listar e contar quantas pastas tem no caminho selecionado no folderbrowserdialog string[] diretorios = Directory.GetDirectories(caminho); contdir = diretorios.Length; MessageBox.Show(contdir.ToString()); for (int cont = 0; cont < contdir;) { caminhosub = diretorios[cont].ToString(); string[] subdiretorios = Directory.GetDirectories(caminhosub); contsub = subdiretorios.Length; textBox1.Text = caminhosub; if (existeDiretorio = Directory.Exists(caminhosub)) { for (int contsub2 = 0; contsub2 < contsub;) { caminhosub2 = subdiretorios[contsub2].ToString(); string[] subdiretorios2 = Directory.GetDirectories(caminhosub2); contsub4 = subdiretorios2.Length; textBox1.Text = caminhosub2; if (existesubDiretorio = Directory.Exists(caminhosub2)) { for (int contsub3 = 0; contsub3 < contsub4; ) { caminhosub3 = subdiretorios2[contsub3].ToString(); string[] subdiretorios3 = Directory.GetDirectories(caminhosub3); //contsub = subdiretorios2.Length; textBox1.Text = caminhosub3; if (existesubDiretorio2 = Directory.Exists(caminhosub3)) { MessageBox.Show("Pasta Existe"); } else { MessageBox.Show("Pasta Não Existe !!!"); Directory.Delete(caminhosub3); } contsub3++; } } else { MessageBox.Show("Pasta Não Existe !!!"); } contsub2++; } } else { MessageBox.Show("Pasta Não Existe !!!"); } cont ++; } } private void button2_Click(object sender, EventArgs e) { verificarpastas(); } private void verificarpastas() { // Vai verificar a subpastas para achar diretorio } private void Form1_Load(object sender, EventArgs e) { } private void button3_Click(object sender, EventArgs e) { Close(); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { } } }
Respostas
-
Felipe pelo que entendi vc varre as subpastas de um diretório raiz e verifica se existe uma pasta especifica dentro deste subdiretório e caso existir vc deleta o SUBDIRETORIO, é isto? Se for eu criaria um método recursivo para buscar as pastas, algo mais ou menos assim:
public const string DirectoryRootName = @"c:\Root Directory"; public const string FolderNameIndicatingDelete = "Delete Folder Name"; private void DirectoryResearch(string path) { bool isRootDirectory = false; // Este bool será usado para saber se o diretorio deve ser excluido se existir a pasta que indica exclusão if (string.IsNullOrWhiteSpace(path)) { // A primeira vez que chamar a rotina deve-se passar a path em branco e o sistema irá usar a constant com o nome base do diretório principal path = DirectoryRootName; isRootDirectory = true; } DirectoryInfo currentDirectory = new DirectoryInfo(path); foreach(DirectoryInfo subDirectoryInfo in currentDirectory.GetDirectories()) { if (isRootDirectory == false) { if(subDirectoryInfo.Name == FolderNameIndicatingDelete) { currentDirectory.Delete(true); break; } } this.DirectoryResearch(subDirectoryInfo.FullName); } }
- Sugerido como Resposta SammuelMiranda sexta-feira, 18 de agosto de 2017 17:10
- Marcado como Resposta Filipe B CastroModerator segunda-feira, 21 de agosto de 2017 13:33
Todas as Respostas
-
Use o método GetDirectories() da classe Directory:
static void Main(string[] args) { string folderPath; Console.Write("Entre o caminho da pasta que deseja escanear: "); folderPath = Console.ReadLine(); Console.Clear(); if (!Path.IsPathRooted(folderPath)) { Console.ForegroundColor = ConsoleColor.Red; Console.Write("Digite um caminho válido!\n\n"); } string[] subFoldersFound = Directory.GetDirectories(folderPath); Console.WriteLine($"Pasta: {Path.GetFileName(folderPath)}"); Console.WriteLine("Subpastas: \n"); foreach (string folder in subFoldersFound) { Console.WriteLine(Path.GetFileName(folder)); } Console.Write("\nPressione qualquer tecla para continuar..."); Console.ReadLine(); }
-
Felipe pelo que entendi vc varre as subpastas de um diretório raiz e verifica se existe uma pasta especifica dentro deste subdiretório e caso existir vc deleta o SUBDIRETORIO, é isto? Se for eu criaria um método recursivo para buscar as pastas, algo mais ou menos assim:
public const string DirectoryRootName = @"c:\Root Directory"; public const string FolderNameIndicatingDelete = "Delete Folder Name"; private void DirectoryResearch(string path) { bool isRootDirectory = false; // Este bool será usado para saber se o diretorio deve ser excluido se existir a pasta que indica exclusão if (string.IsNullOrWhiteSpace(path)) { // A primeira vez que chamar a rotina deve-se passar a path em branco e o sistema irá usar a constant com o nome base do diretório principal path = DirectoryRootName; isRootDirectory = true; } DirectoryInfo currentDirectory = new DirectoryInfo(path); foreach(DirectoryInfo subDirectoryInfo in currentDirectory.GetDirectories()) { if (isRootDirectory == false) { if(subDirectoryInfo.Name == FolderNameIndicatingDelete) { currentDirectory.Delete(true); break; } } this.DirectoryResearch(subDirectoryInfo.FullName); } }
- Sugerido como Resposta SammuelMiranda sexta-feira, 18 de agosto de 2017 17:10
- Marcado como Resposta Filipe B CastroModerator segunda-feira, 21 de agosto de 2017 13:33
-
Bom dia,
Por falta de retorno, essa thread está encerrada.
Se necessário, favor abrir uma nova thread.
Atenciosamente,Filipe B de Castro
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.