Пустые папки и подпапки в программахWindowsFormsApplication на языке C#
-
5 декабря 2009 г. 17:13Используя в своей программе классы FileInfo[] и DirectoryInfo[], столкнулся с проблемой пустых папок. А именно, открывая каталог папок в системе и наводя мышь на какую-либо папку, хотя бы и содержащую внутри себя множество пустых подпапок сколь угодно глубокой вложенноси, если ВСЕ вложенные подпапки пустые, я сразу вижу это, ибо система высвечивает мне РАЗМЕР ПАПКИ В БАЙТАХ, а именно 0 байт. Если же я в процессе работы обращаюсь к экземпляру класса DirectoryInfo[], то Visual Studio после ввода точки в конце имени этого экземпляра предлагает целый список различных свойств, в котором, к сожалению, нет РАЗМЕРА этой папки в байтах. Есть количество подпапок, есть количество файлов. Но если ВСЕ вложенные подпапки ПУСТЫЕ, я никак не могу установить этот факт, только лишь устраивая рекурсивный перебор всех вложений. Вопрос: как всё-таки определить РАЗМЕР ПАПКИ В БАЙТАХ, находясь в рамках конструкций языка C# и не входя в неязыковые конструкции тболее низкого уровня? Согласитесь, что устраивать рекурсивную проверку каждой папки при значительном их числе и глубоко вложенноси неаккуратно.Альфред.
Almir- Перемещено Siddharth Chavan 1 октября 2010 г. 22:09 MSDN Forums Consolidation (От:Visual C#)
Все ответы
-
6 декабря 2009 г. 10:16
Используя в своей программе классы FileInfo[] и DirectoryInfo[], столкнулся с проблемой пустых папок. А именно, открывая каталог папок в системе и наводя мышь на какую-либо папку, хотя бы и содержащую внутри себя множество пустых подпапок сколь угодно глубокой вложенноси, если ВСЕ вложенные подпапки пустые, я сразу вижу это, ибо система высвечивает мне РАЗМЕР ПАПКИ В БАЙТАХ, а именно 0 байт. Если же я в процессе работы обращаюсь к экземпляру класса DirectoryInfo[], то Visual Studio после ввода точки в конце имени этого экземпляра предлагает целый список различных свойств, в котором, к сожалению, нет РАЗМЕРА этой папки в байтах. Есть количество подпапок, есть количество файлов. Но если ВСЕ вложенные подпапки ПУСТЫЕ, я никак не могу установить этот факт, только лишь устраивая рекурсивный перебор всех вложений. Вопрос: как всё-таки определить РАЗМЕР ПАПКИ В БАЙТАХ, находясь в рамках конструкций языка C# и не входя в неязыковые конструкции тболее низкого уровня? Согласитесь, что устраивать рекурсивную проверку каждой папки при значительном их числе и глубоко вложенноси неаккуратно.
Отвечаю сам себе: Вопрос снят. Просто надо было воспользоваться перегрузкойАльфред.
Almir.GetFiles("*", SearchOption.AllDirectories),а я использовал простейшую перегрузку.GetFiles().А дальше осталось только проверить свойство .Length, показывающее количество файлов УЖЕ ВО ВСЕХ подпапках, содержащихся в заданной. Если оно равно нулю, значит папка пуста.Впрочем, вышеуказанноя перегрузка при большом числе папок сильно замедляет работу. Возможно есть и другое решение. За подсказку буду благодарен.Альфредю
Almir- Помечено в качестве ответа I.VorontsovModerator 6 декабря 2009 г. 19:54
-
12 декабря 2009 г. 8:31И всё-таки приведённая конструкция .GetFiles("*", SearchOption.AllDirectories) не решает полностью вопрос, ибо если я могу определить, есть ли ФАЙЛЫ во всех вложенных подпапках, то ПРОБЛЕМА ПУСТЫХ ФАЙЛОВ остаётся!Например, пустых текстовых файлов .txt. Обращаюсь к разработчикам: в новой версии VS 2010 добавлен ли метод определения РАЗМЕРА В БАЙТАХ в экземпляре класса DirectoryInfo? Может кто тестировал новую VS?
Almir

