Это, вероятно, соединения.
Я просто попытался его на коробке окна с помощью junction.exe
(от Sysinternals), чтобы сделать точку перехода, и использовать эту небольшую программу испытаний, чтобы определить их:
#include <boost/range/iterator_range.hpp>
#include <boost/filesystem.hpp>
#include <vector>
#include <string>
#include <iostream>
int main(int argc, char* argv[])
{
using namespace boost::filesystem;
std::vector<std::string> args(argv+1, argv+argc);
if (args.empty()) args.push_back("C:\\WORK");
for (auto dir : args)
{
recursive_directory_iterator f(dir), l;
for (directory_entry& entry : boost::make_iterator_range(f,l))
{
if (is_other(entry))
{
assert(!is_regular_file(entry));
assert(!is_directory(entry));
std::cout << entry << "\n";
}
}
}
}
Теперь работает это с test.exe "C:\WORK"
распечатанный
"C:\WORK\MyJunction"
Обратите внимание, что assers
доказать, что является ни обычным файлом, ни каталог.
В несколько несвязанных новостях, это довольно сладкая для каталога итерации:
int main(int argc, char* argv[])
{
using namespace boost::adaptors;
std::vector<std::string> const args(argv+1, argv+argc);
for (auto& dir : args)
for (auto& entry : traverse_directory(dir) | filtered(is_valid_file))
std::cout << entry << "\n";
}
Используя эти довольно простые хелперы:
template <typename T>
boost::iterator_range<boost::filesystem::recursive_directory_iterator> traverse_directory(T const& dir) {
boost::filesystem::recursive_directory_iterator f(dir), l;
return boost::make_iterator_range(f, l);
}
static bool is_valid_file(boost::filesystem::directory_entry const& entry) {
return is_regular_file(entry) && !is_other(entry);
}
Посмотреть Live on Coliru
Арен» т эти символические ссылки? –
Они могут быть ссылками на имя пользователя/изображения или что-то еще. вы также можете распечатать этот тип, а также указать путь к тому, что, по сути, думает система boost. – 111111
Я попытаюсь получить тип файловой системы с форсированием файлов, думает, что да, да ... в любом случае, что я сделал, чтобы избежать этих папок, нужно сделать попытку поймать, запрашивая размер файла, поскольку эти папки не имеют свойства размера – user3009804