C # Stackoverflow в операции рекурсивного удаления каталога - PullRequest
0 голосов
/ 03 июля 2010

Я сейчас переписываю инструмент удаления файлов с безопасным алгоритмом удаления и прочее. Когда я пытаюсь рекурсивно просмотреть каталог и удалить все файлы в нем, все его подкаталоги и т. Д., Отладчик сгенерирует исключение stackoverflow.

   private void wipeFile(string file)
   {
        bool ret = false;
        switch (m_algo)
        {
            case Algorithms.fastAlgo:
                ret = FastWipe.WipeFile(file);
                break;
            case Algorithms.safeAlgo:
                ret = CleanWipe.WipeFile(file, m_timesToWrite);
                break;
        }
        handleFileWiped(file, DateTime.Now, ret);
    }

    /// <summary>
    /// Wipes a directory recursively
    /// </summary>
    /// <param name="directory">Given subdir</param>
    private void deepWipe(string directory)
    {
        foreach (string file in Directory.GetFiles(directory))
        {
            wipeFile(file);
        }
        foreach (string subdir in Directory.GetDirectories(directory))
        {
            deepWipe(directory);
        }
        try
        {
            Directory.Delete(directory);
            handleDirectoryWiped(directory, DateTime.Now, true);
        }
        catch { handleDirectoryWiped(directory, DateTime.Now, false); }
    }

1 Ответ

3 голосов
/ 03 июля 2010

Изменить это:

 foreach (string subdir in Directory.GetDirectories(directory))
 {
     deepWipe(directory);
 }

до:

 foreach (string subdir in Directory.GetDirectories(directory))
 {
     deepWipe(subdir);
 }
...