#c #boost #directory
#c #boost #каталог
Вопрос:
Я действительно долгое время бродил по сети, и я даже не приблизился к какому-либо решению этой проблемы. Извините, если экспертам это кажется тривиальным.
У меня есть код на C , который принимает двоичный файл в качестве входного аргумента, выполняет некоторые вычисления, а затем выводит .csv
файл. Итак, я использовал командную строку для выполнения кода над одним или несколькими файлами следующим образом
MyProgram filename1 filename2
В моем случае все мои файлы от filename1
до filenameN
находятся в определенной папке.
Я хочу знать, есть ли какой-либо способ ввести имя папки, чтобы программа выполнялась для всех включенных файлов.
Может быть, что-то вроде этого
Myprogram /Users/Whatever
или в Windows, как
Myprogram C:UserWhatever
Заранее спасибо
Комментарии:
1. Рассматривалось использование цикла в коде?
2. Используйте Boost. Файловая система для перебора по заданному каталогу. C 17 будет иметь файловую систему как часть
std
3. @CinCout Я не имею представления о том, как использование цикла внутри кода поможет прочитать неизвестное количество файлов в папке. Не могли бы вы дать мне какие-либо идеи для этого, пожалуйста?
4. @WhiZTiM Я попытался установить boost и настроить его. Но я закончил с действительно более сложными проблемами. Например, не находит файл или даже что-то вроде (неопределенные символы для архитектуры x86_64). Теперь я еще больше потерян!
Ответ №1:
Для Linux вы можете использовать командную строку с аргументами типа «дикие символы», такими как: YourProgram path/to/*.csv
и вы получите все файлы, соответствующие шаблону path/to/*.csv
, в массив argv.
Если это Windows, вы можете использовать некоторые Win API, такие как FindFirstFile, FindNextFile, чтобы разрешить подстановочные символы и получить все файлы соответствия. вы также можете проверить этот пример:
Комментарии:
1. Спасибо за ваш ответ.
2. Спасибо за ваш ответ. Однако, как я упоминал в своем вопросе, все мои файлы являются двоичными файлами, поэтому они не имеют никакого расширения. Когда я пытаюсь использовать подстановочные знаки для Linux, он считывает только первый файл.
3. В Linux вы получите 1-й аргумент в
argv[1]
2-м вargv[2]
и так далее. вам нужно будет выполнить цикл для всех аргументовfor (i=1; i<argc; i )
.
Ответ №2:
На консолях на базе * nix команда «xargs» — ваш друг. например
find ./MyDirectory -name "*.notcsv" | xargs myprogram
Лично я бы не стал изменять сам код для перебора файлов, поскольку операционная система предоставляет механизм. Это делает вашу программу более «единой ответственностью». Если вы отправляете выходные данные в стандартный вывод / cout, это позволяет при необходимости связать вашу программу с другими командами обработки текста.
Приветствия