Mam ścieżkę i chcę wyświetlić listę podkatalogów, w których każdy podkatalog nie zawiera żadnego innego katalogu. (Tylko te podkatalogi, które nie zawierają folderów, ale tylko pliki).
Jakiś sprytny sposób to zrobić?
Odpowiedzi:
21 dla odpowiedzi № 1Rozumiem, że chcesz wyświetlić podkatalogi poniżej danej ścieżki, które zawierają tylko pliki.
static IEnumerable<string> GetSubdirectoriesContainingOnlyFiles(string path)
{
return from subdirectory in Directory.GetDirectories(path, "*", SearchOption.AllDirectories)
where Directory.GetDirectories(subdirectory).Length == 0
select subdirectory;
}
16 dla odpowiedzi nr 2
DirectoryInfo dInfo = new DirectoryInfo(<path to dir>);
DirectoryInfo[] subdirs = dInfo.GetDirectories();
1 dla odpowiedzi nr 3
Możesz użyć Directory.GetDirectories
metoda.
Nie jestem jednak pewien, czy poprawnie zrozumiałem twoje pytanie ... czy możesz to wyjaśnić?
1 dla odpowiedzi nr 4
Oparty na odpowiedzi Havarda, ale nieco krótszy (i może nieco łatwiejszy do odczytania, ponieważ używa !Subdirs.Any()
zamiast Subdirs.Length == 0
):
static IEnumerable<string> GetSubdirectoriesContainingOnlyFiles(string path)
{
return Directory.GetDirectories(path, "*", SearchOption.AllDirectories)
.Where( subdir => !Directory.GetDirectories(subdir).Any() );
}
Należy również pamiętać, że to wymaga using System.Linq;
do pracy, ponieważ używa języka zapytań LINQ. (I oczywiście using System.IO;
dla Directory
klasa :))