ho scritto il seguente metodo per determinare la dimensione massima del file:ricorsione è la migliore opzione per la determinazione della massima dimensione del file in una directory
public static long GetMaxFileSize(string dirPath, long maxFileSize)
{
DirectoryInfo [] dirInfos = new DirectoryInfo(dirPath).GetDirectories();
foreach (DirectoryInfo dirInfo in dirInfos)
{
DirectoryInfo [] subDirInfos = dirInfo.GetDirectories();
foreach (DirectoryInfo subDirInfo in subDirInfos)
maxFileSize = GetMaxFileSize(dirInfo.FullName, maxFileSize);
FileInfo [] fileInfos = dirInfo.GetFiles();
foreach (FileInfo fileInfo in fileInfos)
{
if (maxFileSize < fileInfo.Length)
maxFileSize = fileInfo.Length;
}
}
return maxFileSize;
}
Code Complete raccomanda a "uso ricorsione in modo selettivo". Stando così le cose, mi chiedevo se la comunità pensava che questo fosse un uso valido della ricorsione. Se no, c'è una tecnica migliore per farlo?
EDIT: Non riesco a utilizzare LINQ perché non è disponibile in .NET 2.0, ma non voglio taggarlo come una domanda di .NET 2.0 solo per ulteriori punti di discussione come Jared di seguito.
MODIFICA: Codice pulito basato su un problema che non è stato rilevato nei file della directory radice.
public static long GetMaxFileSize(DirectoryInfo dirInfo, long maxFileSize)
{
DirectoryInfo [] subDirInfos = dirInfo.GetDirectories();
foreach (DirectoryInfo subDirInfo in subDirInfos)
{
maxFileSize = GetMaxFileSize(subDirInfo, maxFileSize);
}
FileInfo [] fileInfos = dirInfo.GetFiles();
foreach (FileInfo fileInfo in fileInfos)
{
if (maxFileSize < fileInfo.Length)
maxFileSize = fileInfo.Length;
}
return maxFileSize;
}
come si fa a gestire incroci e "scorciatoie" (hard link o simbolici)? Un albero di directory non è sempre un albero ... – lexu
Non sono sicuro che sia * soggettivo *. Una volta stabilito cosa intendi per "migliore opzione" (impronta di memoria più veloce o più bassa o altro), qualsiasi soluzione specifica è facilmente verificabile. C'è un tag * oggettivo *? Per interesse - cosa intendevi per "migliore opzione"? –
Non sapevo se avrei dovuto contrassegnarlo come soggettivo o no, ma lo rimuoverò a meno che qualcuno non oggetti. Con la migliore opzione intendevo la soluzione più elegante e affidabile. Non ero sicuro che esistesse una tecnica più sicura che potesse anche ridurre la quantità di codice richiesta. –