Мое приложение С# 3.5 работает на Windows 7 Ultimate, 64 бит. Он выполняет все папки вложенных папок для выполнения своей работы. Однако он терпит неудачу (попадает в бесконечный цикл до исключения StackOverflow.com), если выполняется против папки, имя которой является только одним символом, который равен # 255.
Чтобы воспроизвести, вы можете сделать следующее:
- запустите Windows Explorer, создав папку C:\Temp в этой папке
- создайте новую папку и переименуйте ее с помощью Alt-255 (используя цифровую клавиатуру)
- создать подпапки "first" и "second" there
- создать подпапки "1" и "2" в разделе "Темп
Итак, теперь у вас есть:
- C:\1
- C:\2
- C:\\ first
- C:\\ second
Для такой папки C:\Temp с подпапкой с именем # 255 (или более # 255 символов) приведен следующий код:
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");
}
}
никогда не закончится и даст вам результат:
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\
Итак, как правильно перечислить такие папки вложенных папок?