Немного переписанная функция, работает замечательно, но размер папок к которым нет доступа на чтение не учитывает.
#region "Размер папки"
public static long DirSize(DirectoryInfo d)
{
long Size = 0;
// Add file sizes.
FileInfo[] fis = d.GetFiles();
foreach (FileInfo fi in fis)
{
try
{
Size += fi.Length;
}
//Данное исключение делается для пропуска папок к которым нет доступа
catch (UnauthorizedAccessException)
{
;
}
}
// Add subdirectory sizes.
DirectoryInfo[] dis = d.GetDirectories();
foreach (DirectoryInfo di in dis)
{
try
{
Size += DirSize(di);
}
//Данное исключение делается для пропуска папок к которым нет доступа
catch (UnauthorizedAccessException)
{
;
}
}
return (Size);
}
#endregion
* This source code was highlighted with Source Code Highlighter.
UPDATE: Абсолютно точный размер невозможно получить даже средствами Windows. Не даёт она доступа к таблице разделов. В FAT (и FAT32) можно было напрямую прочитать таблицу и сделать подсчёт по ней
http://msdn.microsoft.com/ru-ru/library/system.io.directory.aspx
ОтветитьУдалитьвообще не копипаст. притом с офф документации, которую и так найти легко