- По данному списку файлов составьте список всех директорий
- Как получить список файлов в каталоге с помощью C или c++?
- 24 ответов
- Как получить список файлов и папок на C#
- Получить список файлов в папке
- Получить список папок в папке
- Получить список файлов по шаблону рекурсивно
- Рекурсивно получить список всех файлов и папок
По данному списку файлов составьте список всех директорий
Прошу помочь с заданием выполняемым на одной тестовой площадке, где основная часть программы скрыта:
Так получилось, что вы пишете духовную операционную систему «Оконце, версия 0.99», и модуль к этой системе, отвечающий за составление медиа-альбомов пользователя.
По данному вам списку файлов составьте список всех директорий, которые содержат файлы с расширением .mp3 и .wav.
Каждую директорию нужно выводить только один раз, порядок значения не имеет.
«
Мне доступен каркас метода, который надо правильно написать, у меня получилось вот что:
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Получить список всех директорий
Здравствуйте. Как можно получить список всех директорий и файлов? Можно ли это как нибудь.
Определите функцию, зависящую от одного аргумента, которая по данному списку формирует список его элементов
Задача: Определите функцию, зависящую от одного аргумента, которая по данному списку формирует.
Как получить список директорий и список файлов в директории?
Очень нужно организовать поиск на диске. Как искать в нутри файла я знаю, а вот как искать вовсех.
Создайте предикат, который по данному списку строит список его элементов, встречающихся в нем не менее n раз
1. Создайте предикат, который по данному списку строит список его элементов, встречающихся в нем не.
А вот как в коде использовать:
Спасибо! С Вашим компаратором заработало! Может и в сторону расширения метода мне надо было думать, тема такая ранее была.
Добавлено через 12 минут
Также, работает.
Список процессов, директорий их исполняемых файлов.
Доброго времени суток, нужно в listbox занести имена процессов и адреса к exe’шникам. С процессами.
Рекурсивная функция вывода всех файлов и директорий
функция ищет все файлы включая директории с набором др. файлов и директорий при этом выводит их на.
Удаление всех файлов и каталогов по списку
Создайте командный файл, который удаляет все файлы и каталоги, в заданных каталогах, указанные в.
Функция, которая по заданному пути показывает список директорий и файлов которые находятся в ней
мне нужен объект или функция которая по заданному пути показывала список директория и файлов.
Источник
Как получить список файлов в каталоге с помощью C или c++?
мне не разрешено выполнять ls команда и анализ результатов из моей программы.
24 ответов
в небольших и простых задачах я не использую boost, я использую dirent.h, который также доступен для Windows:
Это просто небольшой файл заголовка и делает большинство простых вещей, которые вам нужны, не используя большой подход на основе шаблонов, как boost(не обижайтесь, мне нравится boost!).
автором уровня совместимости windows является Тони Ронкко. В Unix, это стандартный заголовок.
обновление 2017:
В C++17 есть теперь это официальный способ перечислить файлы вашей файловой системы: std::filesystem . Есть отличный ответ от Shreevardhan ниже с этим исходным кодом:
рассмотрите возможность повышения его ответа, если вы используете подход C++17.
к сожалению, стандарт C++ не определяет стандартный способ работы с файлами и папками в эту сторону.
поскольку нет кросс-платформенного способа, лучший кросс-платформенный способ-использовать библиотеку, такую как модуль файловой системы boost.
кросс-платформенный метод повышения:
следующая функция, учитывая путь к каталогу и имя файла, рекурсивно ищет каталог и его подкаталоги для имя файла, возврат bool, и в случае успеха, путь к файлу, который был найден.
источник со страницы boost, упомянутой выше.
для систем на базе Unix / Linux:
пример кода, который ищет каталог для записи «имя»:
исходный код из вышеуказанных страниц.
для систем на базе windows:
вы можете использовать Win32 API FindFirstFile / findnextfile функция / FindClose функции.
в следующем примере C++ показано минимальное использование FindFirstFile.
исходный код с вышеуказанных страниц msdn.
C++17 теперь имеет std::filesystem::directory_iterator , который можно использовать как
достаточно одной функции, вам не нужно использовать стороннюю библиотеку (для Windows).
PS: Как упоминалось @Sebastian, вы можете изменить *.* to *.ext чтобы получить только EXT-файлы (т. е. определенного типа) в этом каталоге.
для решения только C, пожалуйста, проверьте это. Для этого требуется только дополнительный заголовок:
некоторые преимущества перед другими вариантами:
- это портативный-обертывания POSIX dirent и Windows FindFirstFile
- он использует readdir_r где доступно, что означает, что это (обычно) threadsafe
- поддерживает Windows UTF-16 через то же самое UNICODE макрос
- это C90 так что даже очень древние компиляторы могут использовать его
Я рекомендую использовать glob С этой оболочкой многоразовые. Он генерирует vector соответствующие пути к файлам, которые соответствуют шаблону glob:
что тогда можно назвать нормальным шаблону системы, такие как:
вот очень простой код C++11 используя boost::filesystem библиотека для получения имен файлов в каталоге (за исключением имен папок):
почему бы не использовать glob() ?
Я думаю, ниже фрагмента можно использовать для списка всех файлов.
Ниже приведена структура структуры dirent
попробуйте boost для метода x-platform
или просто используйте свой конкретный файл для ОС.
проверьте этот класс, который использует win32 api. Просто создайте экземпляр, предоставив foldername из которого вы хотите список, то вызов getNextFile метод, чтобы получить следующий filename из каталога. Я думаю, что это нужно windows.h и stdio.h .
руководство GNU FTW
кроме того, иногда это хорошо, чтобы пойти прямо к источнику (каламбур). Вы можете многому научиться, глядя на внутренности некоторых наиболее часто используемые команды в Linux. Я установил простое зеркало coreutils GNU на github (для чтение.)
возможно, это не относится к Windows, но ряд случаев использования вариантов Unix может быть с помощью этих методов.
надеюсь, это поможет.
Я надеюсь, что этот код поможет вам.
эта реализация реализует вашу цель, динамически заполняя массив строк содержимым указанного каталога.
это работает для меня. Простите, если не могу вспомнить источник. Вероятно, это с мужской страницы.
Shreevardhan ответ работает отлично. Но если вы хотите использовать его в C++14 просто внести изменения namespace fs = experimental::filesystem;
вы можете получить все прямые файлы в корневом каталоге с помощью std:: experimental::filesystem:: directory_iterator(). Затем прочитайте название этих pathfiles.
тогда просто прочитайте файл.
EDIT: этот ответ следует рассматривать как взлом, но он действительно работает (хотя и определенным образом), если у вас нет доступа к более элегантным решениям.
этот ответ должен работать для пользователей Windows, у которых возникли проблемы с этой работой с Visual Studio с любым другим ответом.
скачать dirent.H файл со страницы github. Но лучше просто использовать Raw dirent.H файл и выполните мои шаги ниже (это то, как я получил его на работу).
страница Github для dirent.h для Windows:страница Github для dirent.h
перейдите в свой проект и добавьте новый элемент ( Ctrl + Shift + A ). Добавить файл заголовка (.h) и назовите его dirent.h.
вставить Raw dirent.файл H код в заголовок.
включить » dirent.h » в вашем коде.
поставить ниже void filefinder() метод в вашем коде и вызовите его из вашего main функция или редактировать функции, как вы хотите использовать его.
поскольку файлы и подкаталоги каталога обычно хранятся в древовидной структуре, интуитивно понятным способом является использование алгоритма DFS для рекурсивного обхода каждого из них. Вот пример в операционной системе windows с помощью основных файловых функций в io.h. Вы можете заменить эти функции в другой платформе. Что я хочу выразить, так это то, что основная идея DFS идеально подходит для этой проблемы.
Я попытался следовать примеру, приведенному в и ответы и, возможно, стоит отметить, что это выглядит так, как будто std::filesystem::directory_entry было изменено, чтобы не было перегрузки оператора. Вместо std::cout мне пришлось использовать следующее, чтобы скомпилировать и заставить его работать:
пыталась передать p на std::cout вылилось в ошибку по перегрузке.
просто то, что я хочу поделиться и поблагодарить вас за чтение материала. Поиграйте с функцией немного, чтобы понять ее. Тебе может понравиться. e означало расширение, p-путь, а s-разделитель пути.
Если путь передается без конечного разделителя, разделитель будет добавлен к пути. Для расширения, если введена пустая строка, функция вернет любой файл, который не имеет расширения в своем имени. Если бы одна звезда была вводится, чем все файлы в каталоге будут возвращены. Если длина e больше 0, но не является единицей*, то точка будет добавлена к e, если e не содержит точку в нулевом положении.
для возвращаемого значения. Если возвращается карта нулевой длины, то ничего не найдено, но каталог был открыт нормально. Если индекс 999 доступен из возвращаемого значения, но размер карты равен только 1, это означает, что возникла проблема с открытием пути к каталогу.
обратите внимание, что для эффективности, эту функцию можно разделить в 3 более небольших функции. Кроме того, вы можете создать функцию вызывающего абонента, которая определит, какую функцию он будет вызывать на основе ввода. Почему это более эффективно? Сказал, что если вы собираетесь захватить все, что является файлом, делая этот метод, подфункция, построенная для захвата всех файлов, просто захватит все, что является файлами, и не нужно оценивать любые другие ненужные условия каждый раз, когда он нашел файл.
Это было бы также применяются, когда вы захватить файлы, которые не имеют расширения. Определенная встроенная функция для этой цели будет оценивать только погоду, если найденный объект является файлом, а затем, имеет ли имя файла точку в нем.
сохранение может быть не так много, если Вы читаете только каталоги с не так много файлов. Но если Вы читаете массовое количество каталогов или если каталог имеет пару сотен тысяч файлов, это может быть огромная экономия.
Источник
Как получить список файлов и папок на C#
Задача получения списка файлов или папок в другой папке часто бывает при написании программы, поэтому, чтобы рецепт всегда был под рукой, решил написать коротенькую статью.
Получить список файлов в папке
Для получения списка файлов можно воспользоваться методом GetFiles.
Пример поиска файлов:
Метод GetFiles может принимать 3 параметра, из которых первый обязательный:
GetFiles(String path, String pattern, SearchOption options)
path — путь к папке, в которой ищем файлы;
pattern — шаблон поиска файлов (например, *.txt или ??abc.doc);
options — способ поиска, указывающий нужно искать только в текущей папке (SearchOption.TopDirectoryOnly) или во вложенных тоже (SearchOption.AllDirectories).
Пример поиска файлов по шаблону смотрите ниже (рекурсивный поиск).
Если список файлов очень большой, тогда лучше воспользоваться методом EnumerateFiles (доступен в .NET Framework 4.0 и выше), т.к. в отличие от GetFiles он возвращает IEnumerable и заполняет его как бы асинхронно, т.е. можно приступить к перебору списка файлов сразу, не дожидаясь получения всего списка и тем самым увеличить скорость обработки полученных файлов.
Метод EnumerateFiles так же может принимать 3 параметра:
path — путь к папке, в которой ищем файлы;
pattern — шаблон поиска файлов;
options — способ поиска.
Пример поиска файлов методом EnumerateFiles:
Как видим, поиск методом EnumerateFiles аналогичен GetFiles, однако, он начнется сразу, до получения всего списка файлов, что может быть актуальным при очень большом количестве файлов.
Получить список папок в папке
Для получения списка папок можно воспользоваться методом GetDirectories.
Пример поиска папок с помощью GetDirectories:
Метод GetDirectories может принимать 3 параметра, из которых первый обязательный:
GetDirectories(String path, String pattern, SearchOption options)
path — путь к папке, в которой ищем файлы;
pattern — шаблон поиска файлов (например, *.txt или ??abc.doc);
options — способ поиска, указывающий нужно искать только в текущей папке (SearchOption.TopDirectoryOnly) или во вложенных тоже (SearchOption.AllDirectories).
По аналогии с поиском файлов, есть метод EnumerateDirectories, который позволяет обрабатывать список папок не дожидаясь его полного получения (доступен в .NET Framework 4.0 и выше).
Метод EnumerateDirectories аналогично GetDirectories принимает 3 параметра:
path — путь к папке, в которой ищем файлы;
pattern — шаблон поиска файлов;
options — способ поиска.
Пример поиска папок с помощью EnumerateDirectories:
Примечание: Во всех способах получения файлов и папок можно во втором параметре указывать шаблон поиска pattern, однако в нем можно использовать только * (любое количество любых символов) и ? (один любой символ) для указания шаблона поиска, регулярные выражения не поддерживаются.
Получить список файлов по шаблону рекурсивно
В этом случае нужно лишь добавить 2-й параметр, в котором указываем маску файлов и 3-й параметр, означающий что нужно искать файлы так же во вложенных папках.
Однако, у этого способа есть недостаток — в случае, если в какую-то папку нет доступа, получится ошибка и список файлов не будет получен совсем.
Рекурсивно получить список всех файлов и папок
Этот пример рекурсивного поиска файлов и папок не прервется в случае ошибки, а продолжится дальше. Вместо массива здесь используется List для записи списка файлов и папок.
Плюсом такого рекурсивного поиска так же является то, что можно еще и контролировать уровень вложенности и делать, например, отступы для разных уровней.
Источник