none
Пустые папки и подпапки в программахWindowsFormsApplication на языке C# RRS feed

  • Вопрос

  • Используя в своей программе классы  FileInfo[] и DirectoryInfo[], столкнулся с проблемой пустых папок. А именно, открывая каталог папок в системе и наводя мышь на какую-либо папку, хотя бы и содержащую внутри себя множество пустых подпапок сколь угодно глубокой вложенноси, если ВСЕ вложенные подпапки пустые, я сразу вижу это, ибо система высвечивает мне РАЗМЕР ПАПКИ В БАЙТАХ, а именно 0 байт. Если же я в процессе работы обращаюсь к экземпляру класса  DirectoryInfo[], то Visual Studio после ввода точки в конце имени этого экземпляра предлагает целый список различных свойств, в котором, к сожалению, нет РАЗМЕРА этой папки в байтах. Есть количество подпапок, есть количество файлов. Но если ВСЕ вложенные подпапки ПУСТЫЕ, я никак не могу установить этот факт, только лишь устраивая рекурсивный перебор всех вложений. Вопрос: как всё-таки определить РАЗМЕР ПАПКИ В БАЙТАХ, находясь в рамках конструкций языка C# и не входя в неязыковые конструкции тболее низкого уровня? Согласитесь, что устраивать рекурсивную проверку каждой папки при значительном их числе и глубоко вложенноси неаккуратно.
    Альфред.

    Almir
    • Перемещено Siddharth Chavan 1 октября 2010 г. 22:09 MSDN Forums Consolidation (От:Visual C#)
    5 декабря 2009 г. 17:13

Ответы

  • Используя в своей программе классы  FileInfo[] и DirectoryInfo[], столкнулся с проблемой пустых папок. А именно, открывая каталог папок в системе и наводя мышь на какую-либо папку, хотя бы и содержащую внутри себя множество пустых подпапок сколь угодно глубокой вложенноси, если ВСЕ вложенные подпапки пустые, я сразу вижу это, ибо система высвечивает мне РАЗМЕР ПАПКИ В БАЙТАХ, а именно 0 байт. Если же я в процессе работы обращаюсь к экземпляру класса  DirectoryInfo[], то Visual Studio после ввода точки в конце имени этого экземпляра предлагает целый список различных свойств, в котором, к сожалению, нет РАЗМЕРА этой папки в байтах. Есть количество подпапок, есть количество файлов. Но если ВСЕ вложенные подпапки ПУСТЫЕ, я никак не могу установить этот факт, только лишь устраивая рекурсивный перебор всех вложений. Вопрос: как всё-таки определить РАЗМЕР ПАПКИ В БАЙТАХ, находясь в рамках конструкций языка C# и не входя в неязыковые конструкции тболее низкого уровня? Согласитесь, что устраивать рекурсивную проверку каждой папки при значительном их числе и глубоко вложенноси неаккуратно.
    Альфред.

    Almir
    Отвечаю сам себе: Вопрос снят. Просто надо было воспользоваться перегрузкой 
    .GetFiles("*", SearchOption.AllDirectories),
     а я использовал простейшую перегрузку
    .GetFiles().
    А дальше осталось только проверить свойство .Length, показывающее количество файлов УЖЕ ВО ВСЕХ подпапках, содержащихся в заданной. Если оно равно нулю, значит папка пуста.
    Впрочем, вышеуказанноя перегрузка при большом числе папок сильно замедляет работу. Возможно есть и другое решение. За подсказку буду благодарен.
    Альфредю

    Almir
    • Помечено в качестве ответа I.Vorontsov 6 декабря 2009 г. 19:54
    6 декабря 2009 г. 10:16

Все ответы

  • Используя в своей программе классы  FileInfo[] и DirectoryInfo[], столкнулся с проблемой пустых папок. А именно, открывая каталог папок в системе и наводя мышь на какую-либо папку, хотя бы и содержащую внутри себя множество пустых подпапок сколь угодно глубокой вложенноси, если ВСЕ вложенные подпапки пустые, я сразу вижу это, ибо система высвечивает мне РАЗМЕР ПАПКИ В БАЙТАХ, а именно 0 байт. Если же я в процессе работы обращаюсь к экземпляру класса  DirectoryInfo[], то Visual Studio после ввода точки в конце имени этого экземпляра предлагает целый список различных свойств, в котором, к сожалению, нет РАЗМЕРА этой папки в байтах. Есть количество подпапок, есть количество файлов. Но если ВСЕ вложенные подпапки ПУСТЫЕ, я никак не могу установить этот факт, только лишь устраивая рекурсивный перебор всех вложений. Вопрос: как всё-таки определить РАЗМЕР ПАПКИ В БАЙТАХ, находясь в рамках конструкций языка C# и не входя в неязыковые конструкции тболее низкого уровня? Согласитесь, что устраивать рекурсивную проверку каждой папки при значительном их числе и глубоко вложенноси неаккуратно.
    Альфред.

    Almir
    Отвечаю сам себе: Вопрос снят. Просто надо было воспользоваться перегрузкой 
    .GetFiles("*", SearchOption.AllDirectories),
     а я использовал простейшую перегрузку
    .GetFiles().
    А дальше осталось только проверить свойство .Length, показывающее количество файлов УЖЕ ВО ВСЕХ подпапках, содержащихся в заданной. Если оно равно нулю, значит папка пуста.
    Впрочем, вышеуказанноя перегрузка при большом числе папок сильно замедляет работу. Возможно есть и другое решение. За подсказку буду благодарен.
    Альфредю

    Almir
    • Помечено в качестве ответа I.Vorontsov 6 декабря 2009 г. 19:54
    6 декабря 2009 г. 10:16
  • И всё-таки приведённая конструкция .GetFiles("*", SearchOption.AllDirectories) не решает полностью вопрос, ибо если я могу определить, есть ли ФАЙЛЫ во всех вложенных подпапках, то ПРОБЛЕМА ПУСТЫХ ФАЙЛОВ остаётся!
    Например, пустых текстовых файлов .txt. Обращаюсь к разработчикам: в новой версии VS 2010 добавлен ли метод определения РАЗМЕРА В БАЙТАХ в экземпляре класса DirectoryInfo? Может кто тестировал новую VS?

    Almir
    12 декабря 2009 г. 8:31