una tiempo sonido soltamos saber profundidad producido pozo piedra persona para oye mucho hasta hace fondo determinar desde deja contra choque calcular caer cabo brocal agua c# .net folders

tiempo - C#¿La mejor forma de obtener la profundidad de la carpeta para una ruta determinada?



se deja caer una piedra en un pozo de agua (5)

La parte superior de mi cabeza:

Directory.GetFullPath().Split("//").Length;

Estoy trabajando en algo que requiere atravesar el sistema de archivos y para cualquier ruta determinada, necesito saber qué tan "profundo" estoy en la estructura de carpetas. Esto es lo que estoy usando actualmente:

int folderDepth = 0; string tmpPath = startPath; while (Directory.GetParent(tmpPath) != null) { folderDepth++; tmpPath = Directory.GetParent(tmpPath).FullName; } return folderDepth;

Esto funciona, pero sospecho que hay una forma mejor / más rápida? Muy agradecido por cualquier comentario.


Si usa los miembros de la clase Path , puede hacer frente a las localizaciones del carácter de separación de ruta y otras advertencias relacionadas con la ruta. El siguiente código proporciona la profundidad (incluida la raíz). No es robusto para las cuerdas malas y tal, pero es un comienzo para ti.

int depth = 0; do { path = Path.GetDirectoryName(path); Console.WriteLine(path); ++depth; } while (!string.IsNullOrEmpty(path)); Console.WriteLine("Depth = " + depth.ToString());


Siempre me gustan las soluciones recursivas. Ineficiente, pero divertido!

public static int FolderDepth(string path) { if (string.IsNullOrEmpty(path)) return 0; DirectoryInfo parent = Directory.GetParent(path); if (parent == null) return 1; return FolderDepth(parent.FullName) + 1; }

Me encanta el código Lisp escrito en C #!

Aquí hay otra versión recursiva que me gusta aún mejor, y probablemente sea más eficiente:

public static int FolderDepth(string path) { if (string.IsNullOrEmpty(path)) return 0; return FolderDepth(new DirectoryInfo(path)); } public static int FolderDepth(DirectoryInfo directory) { if (directory == null) return 0; return FolderDepth(directory.Parent) + 1; }

Buenos tiempos, buenos momentos ...


Suponiendo que su ruta de acceso ya ha sido verificada por ser válida, en .NET 3.5 también podría usar LINQ para hacerlo en 1 línea de código ...

Console.WriteLine (@ "C: / Folder1 / Folder2 / Folder3 / Folder4 / MyFile.txt" .Where (c => c = @ "/"). Count);


Estoy más que tarde en esto, pero quería señalar que la respuesta de Paul Sonier es probablemente la más corta, pero debería ser:

Path.GetFullPath(tmpPath).Split(Path.DirectorySeparatorChar).Length;