Boost FileSystems, нужна помощь, чтобы понять, что я делаю

Я написал программу, использующую файловые системы boost, почти год назад, и теперь я пытаюсь вернуться и использовать ее для справки, но я точно не уверен, что происходит с кодом, и может ли быть лучший способ сделать это.

Вот что я сделал, чтобы перебрать каталог.

vector <directory_entry> entry;
copy(directory_iterator("path"), directory_iterator(), back_inserter(entry));

Это дает мне вектор с записями каталога для всех файлов и каталогов внутри каталога по пути.

Затем я рассортировал бы их по двум векторам путей, один для файлов, другой для каталогов, используя is_regular_file.

Я работал с openAL, и мне нужно было сделать этот тип преобразования, чтобы все заработало.

path fp = file[0]; //file a vector of directory_entry
string fps = fp.string();
buffer[0] = AlutCreateBufferFromFile(fps.c_str());

И это сработало, но я думаю, что все это должно быть не очень правильно, как я это использую. В любом случае, я просто хотел посмотреть, может ли кто-нибудь дать мне небольшой совет.


person MVTC    schedule 28.05.2012    source источник


Ответы (1)


Ваш код выглядит правильно.

Вы можете избежать нескольких объявлений переменных, например:

buffer[0] = AlutCreateBufferFromFile(file[0].string().c_str());

Вы также можете не копировать записи каталога в vector и напрямую перебирать записи каталога:

directory_iterator cur("path");
directory_iterator end;
while (cur != end)
{
    path p = *cur;
    ...  // use p
    ++cur;
}

В С++ 11 вы можете улучшить цикл с помощью лямбда-выражений:

for_each(directory_iterator("path"), directory_iterator(), [](const path& p)
{
    // use p
});
person HighCommander4    schedule 28.05.2012