Shrikesh_kale Ответов: 2

Как использовать программа для удаления непустой папки файл в C#


string PathToClean = @"C:\sdelete -p 1 -s -a " + repositoryUrls[i];


Что я уже пробовал:

здесь repositoryurls[I] - это массив строк, чтобы используется программа. Но я хочу удалить только файлы из определенного пути, а не из папки. если папка пуста, то ее не следует удалять.

phil.o

А что именно вы делаете? Откуда берется этот исполняемый файл?

Shrikesh_kale

это утилита Майкрософт для удаления файлов из папки или каталога

ZurdoDev

Вы должны обратиться к документации для sdelete, чтобы узнать, каковы его параметры.

snorkie

Программа не имеет каких-либо флагов, которые будут это делать. Вы должны использовать? Простая рекурсивная функция сделала бы это.

Philippe Mori

Не используйте для этого внешний код. И кстати, не думайте, что он доступен в C:\. Его все равно здесь не должно быть.

2 Ответов

Рейтинг:
2

Fahad Khan Lashari

using System;
using System.IO;

namespace EmptyDirectory
{
    class Program
    {
        static void Main(string[] args)
        {
            RecursiveSearch(@"c:\music");

            Console.WriteLine("Finished.");
            Console.ReadLine();
        }

        private static void RecursiveSearch(string folder)
        {
            foreach (string s in Directory.EnumerateDirectories(folder, "*", SearchOption.AllDirectories).reverse())
            {
                if (Directory.GetFiles(s).Length == 0 && Directory.GetDirectories(s, "*", SearchOption.TopDirectoryOnly).Length == 0)
                {
                    Directory.Delete(s);
                    Console.WriteLine("Deleted: " + s);
                }
            }
        }
    }
}


Dave Kreskowiak

Копирование и вставка чьего-то ответа как своего собственного? Совершенно очевидно, что ты сделал.

Рейтинг:
19

snorkie

Если вам не нужно использовать SDELETE, попробуйте поработать со следующей программой. Он удаляет пустые каталоги из базового каталога. Вы можете использовать его в качестве стартового блока и изменить логику удаления каталогов с содержимым. Затем, если вы должны использовать SDELETE, вы можете вызвать его, чтобы удалить один каталог, когда он будет найден.

Хоган

using System;
using System.IO;

namespace EmptyDirectory
{
    class Program
    {
        static void Main(string[] args)
        {
            RecursiveSearch(@"c:\music");

            Console.WriteLine("Finished.");
            Console.ReadLine();
        }

        private static void RecursiveSearch(string folder)
        {
            foreach (string s in Directory.EnumerateDirectories(folder, "*", SearchOption.AllDirectories))
            {
                if (Directory.GetFiles(s).Length == 0 && Directory.GetDirectories(s, "*", SearchOption.TopDirectoryOnly).Length == 0)
                {
                    Directory.Delete(s);
                    Console.WriteLine("Deleted: " + s);
                }
            }
        }
    }
}


Shrikesh_kale

привет он не удаляет пустую папку на базовом уровне
Я даю путь c:\music и он не может удалить at c:\music\non-empty-folder\non-empty-folder\empty-folder

Shrikesh_kale

он работает только для одного уровня

snorkie

Правильно, код, который я предоставил, был отправной точкой для дальнейшего развития. Я просто пытался направить тебя в нужное русло.