Что является C++ способ идиомы Perl:
my @files = glob("file*.txt");
foreach my $file (@files) {
# process $file
}
Там нет стандартного способа C ++ для эмуляции этого, потому что нет стандартных функций C ++ для чтения содержимого каталога. Что вы можете сделать, так это использовать Boost.Filesystem :
#include <boost/filesystem.hpp> // plus iostream,algorithm,string,iterator
using namespace boost::filesystem; // and std
struct pathname_of {
string operator()(const directory_entry& p) const {
return p.path().filename(); // or your creativity here
}
};
int main(int argc, char* argv[])
{
transform(directory_iterator("."), directory_iterator(),
ostream_iterator<string>(cout, "\n"),
pathname_of());
return 0;
}
Вы можете имитировать "glob", используя fnmatch
. Но вам придется открыть каталог, прочитать его содержимое и найти соответствие каждой записи с помощью fnmatch
.
Нет прямого эквивалента, который был бы стандартным AFAIK.
Назовите меня старой школой.
f = popen("ls file*.txt", "r");
POSIX API определяет для этого функции glob()
и globfree()
. См. man page. wordexp()
и wordfree()
, также определенные POSIX, поддерживают другие виды расширений.