none
Pesquisa não reconhece arquivo .zip como arquivo válido dentro de uma pasta RRS feed

  • Pergunta

  • Fiz essa rotina para deletar pastas vazias, sem arquivos dentro.

    foreach(var folder in folder_new)
            {
                if (Directory.Exists(folder))
                {
                    if (Directory.GetFiles(folder, "*", SearchOption.AllDirectories).Length == 0)
                        {
                           Directory.Delete(folder, true);
                        }
                 }
              }

    Até aí beleza, exceto um problema. Quando tenho uma pasta apenas com um arquivo .zip dentro, ele deleta o folder, por achar que o folder está vazio. Como eu contorno isso?

    Ex: Tenho essa árvore de pastas:

    web\ws\tiss\v3\02\00

    E dentro da pasta 00, tenho o arquivo TISS.zip. A pasta ws e todo seu conteúdo(subfolders) é deletada.

    string[] files_new = Directory.GetFiles(path_files, "*", SearchOption.AllDirectories);
    string[] folder_new = Directory.GetDirectories(path_files, "*", SearchOption.AllDirectories);



    • Editado pnet segunda-feira, 7 de março de 2016 14:23
    segunda-feira, 7 de março de 2016 12:54

Respostas

  • Este exemplo aqui se comporta da forma que você precisa

    http://stackoverflow.com/questions/2811509/c-sharp-remove-all-empty-subdirectories

    static void Main(string[] args)
    {
        processDirectory(@"c:\temp");
    }
    
    private static void processDirectory(string startLocation)
    {
        foreach (var directory in Directory.GetDirectories(startLocation))
        {
            processDirectory(directory);
            if (Directory.GetFiles(directory).Length == 0 && 
                Directory.GetDirectories(directory).Length == 0)
            {
                Directory.Delete(directory, false);
            }
        }
    }

    • Marcado como Resposta pnet quarta-feira, 9 de março de 2016 21:37
    segunda-feira, 7 de março de 2016 14:34

Todas as Respostas

  • Este exemplo aqui se comporta da forma que você precisa

    http://stackoverflow.com/questions/2811509/c-sharp-remove-all-empty-subdirectories

    static void Main(string[] args)
    {
        processDirectory(@"c:\temp");
    }
    
    private static void processDirectory(string startLocation)
    {
        foreach (var directory in Directory.GetDirectories(startLocation))
        {
            processDirectory(directory);
            if (Directory.GetFiles(directory).Length == 0 && 
                Directory.GetDirectories(directory).Length == 0)
            {
                Directory.Delete(directory, false);
            }
        }
    }

    • Marcado como Resposta pnet quarta-feira, 9 de março de 2016 21:37
    segunda-feira, 7 de março de 2016 14:34
  • Olá Cesar, seu exemplo é bem limpo, porém continua a mesma coisa aqui comigo, ou seja, há o arquivo TISS.zip e a pasta e suas subpastas são deletadas. Essa é a árvore:

    web -> ws -> tiss -> v3 -> 2 -> 00 -> TISS_V3.zip

    A pasta ws e todas as suas subpastas são deletadas.

    quarta-feira, 9 de março de 2016 13:09
  • Eu testei este código e funcionou adequadamente aqui. Deve ser algum detalhezinho.

    Pode testar com outro arquivo e ver se acontece o mesmo?

    quarta-feira, 9 de março de 2016 15:05
  • Pessoal, eu consegui apenas usando o DirectoryInfo. Porém preciso agora é melhorar meu método. Ou seja, passar de Directory para DirectoryInfo.

    private void processaDiretorio(string inicio)
            {
                foreach(var diretorio in Directory.GetDirectories(inicio))
                {
                    processaDiretorio(diretorio);
                    if (Directory.GetFiles(diretorio).Length == 0 &&
                        Directory.GetDirectories(diretorio).Length == 0)
                    {
                        Directory.Delete(diretorio, false);
                    }
                }
            }

    quarta-feira, 9 de março de 2016 15:39