none
Распознавание пустых папок в приложениях, написанных на C# RRS feed

  • Вопрос

  • Как в программе на C# получить размер папки в байтах?
    В браузере это легко - наводи курсор и смотри сколько байтов занимает содержимое папки.
    К сожалению, я не нашёл, как получить желаемое из программы. Особенно, если много вложенных пустых папок, а в них много вложенных пустых файлов, например, текстовых. Классы

    DirectoryInfo и

    FileInfo

    не поддерживают методы определения размера в байтах.

    С уважением, Альфред.

    PS Прошу ответить на почту lam35@mail.ru или frodo35@post.ru.


    Almir
    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 22:28 MSDN Forums consolidation (От:Разработка Windows-приложений)
    10 декабря 2009 г. 16:36

Ответы

  • В общем случае примерно так:
            public static long GetDirectorySize(string path)
            {
                var directory = new DirectoryInfo(path);
    
                if (!directory.Exists)
                    throw new DirectoryNotFoundException();
    
                checked
                {
                    var filesSize = directory
                        .GetFiles()
                        .Sum(p => p.Length);
    
                    var subdirectoriesSize = directory
                        .GetDirectories()
                        .Sum(p => GetDirectorySize(p.FullName));
    
                    return filesSize + subdirectoriesSize;
                }
            }
    =)
    • Предложено в качестве ответа I.Vorontsov 21 декабря 2009 г. 12:01
    • Помечено в качестве ответа I.Vorontsov 21 декабря 2009 г. 12:01
    18 декабря 2009 г. 22:18

Все ответы

  • Браузер во время "легко" рекурсивно пробегает по всем подпапкам и считает общий размер.
    10 декабря 2009 г. 16:55
  • В общем случае примерно так:
            public static long GetDirectorySize(string path)
            {
                var directory = new DirectoryInfo(path);
    
                if (!directory.Exists)
                    throw new DirectoryNotFoundException();
    
                checked
                {
                    var filesSize = directory
                        .GetFiles()
                        .Sum(p => p.Length);
    
                    var subdirectoriesSize = directory
                        .GetDirectories()
                        .Sum(p => GetDirectorySize(p.FullName));
    
                    return filesSize + subdirectoriesSize;
                }
            }
    =)
    • Предложено в качестве ответа I.Vorontsov 21 декабря 2009 г. 12:01
    • Помечено в качестве ответа I.Vorontsov 21 декабря 2009 г. 12:01
    18 декабря 2009 г. 22:18