none
Ajuda !! RRS feed

  • 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)
            {
              
    
            }
        }
    }
    





    quarta-feira, 16 de agosto de 2017 22:20

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);
                }
            }

    sexta-feira, 18 de agosto de 2017 14:22

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();
    }
    quinta-feira, 17 de agosto de 2017 00:53
  • 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);
                }
            }

    sexta-feira, 18 de agosto de 2017 14:22
  • 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.

    segunda-feira, 21 de agosto de 2017 13:33
    Moderador