GetDirectories falha ao enumerar subpastas de uma pasta com o nome # 255

A minha aplicação é o C # 3.5 executado no Windows 7 Ultimate, 64 bits. Ele percorre todas as subpastas de pastas para executar seu trabalho. No entanto, ele falha (cai no loop infinito até a exceção StackOverflow.com) se for executado na pasta cujo nome é apenas um símbolo que é # 255.

Para reproduzir, você pode fazer o seguinte:

run Windows Explorer crie a pasta C: \ Temp nesta pastarie uma nova pasta e renomeie-a com Alt-255 (usando o teclado numériccriar subpastas "primeiro" e "segundo" lácrie as subpastas "1" e "2" em Temp

Então você agora tem:

C: \ 1C: \ 2C: \ \ firstC: \ \ segundo

Para essa pasta C: \ Temp com uma subpasta com o nome # 255 (ou mais # 255 symbo, ls), o seguinte código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

class Program
{
  public static string[] GetDirectories(string pathToTraverse)
  {
    List<string> result = new List<string>();

    foreach (DirectoryInfo subFolder in new DirectoryInfo(pathToTraverse).GetDirectories())
    {
      result.Add(subFolder.FullName);
    }
    return result.ToArray();
  }

  public static void TraverseFolders(string folderToTraverse)
  {
    foreach (string subFolder in GetDirectories(folderToTraverse))
    {
      Console.WriteLine(subFolder);

      TraverseFolders(subFolder);
    }
  }

  static void Main(string[] args)
  {
    TraverseFolders(@"C:\Temp");
  }
}

nunca terminará e lhe dará resultados como:

C: \ Temp \
C: \ Temp \ 1
C: \ Temp \ 2
C: \ Temp \
C: \ Temp \ 1
C: \ Temp \ 2
C: \ Temp \
C: \ Temp \ 1
C: \ Temp \ 2
C: \ Temp \

Então, como enumero corretamente essas subpastas de pasta

questionAnswers(3)

yourAnswerToTheQuestion