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 TempEntão você agora tem:
C: \ 1C: \ 2C: \ \ firstC: \ \ segundoPara 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