родительский путь файловой системы и строка ".." для возврата к родительскому пути - PullRequest
1 голос
/ 07 августа 2020

Я не использую boost, я использую файловую систему C ++ 17, которая в основном основана на файловой системе Boosts.

Я хочу перечислить каталоги, имена файлов и ярлык родительского каталога «..» с использованием файловой системы C ++. У меня нет проблем с добавлением каталогов и имен файлов в список, я делаю это следующим образом:

string path="C:\something\test";

//add missing code here:
//should find: ".." or not.

//add directories to list
for (auto& p : directory_iterator(path))
{
    if (p.is_directory())
    {
        string name = p.path().filename().string();
        list[index].push_back(name);
    }
}

//add files to list
for (auto& p : directory_iterator(path))
{
    if (!p.is_directory())
    {
        string filename = p.path().filename().string();   //hele filnavnet (med filtype)
        list[index].push_back(filename);
    }
}

Это работает хорошо, но проблема в том, что мне не хватает «..», если я нахожусь в подкаталог, например C: \ something \ test \ path. Я хочу узнать, доступен ли родительский путь, как проще всего это сделать с помощью файловой системы?

И то же самое, если путь - «C:», тогда моя программа следует сказать, что ".." недоступно. По сути, список может выглядеть примерно так, если я нахожусь в C: \ something \ test \

..
AnotherDirectory
YetAnotherDirectory
file1.txt
file2.txt
etc.txt

, и если я нахожусь в «C:», список будет выглядеть примерно так (без "..")

Something
Directory2
file1.txt
command.com
autoexec.but
config.lol

1 Ответ

0 голосов
/ 07 августа 2020

Я получил эту идею от @ GM

if (fs::current_path() != fs::current_path().parent_path())
    MessageBox(NULL, ".. exists", "Message", MB_OK);
else
    MessageBox(NULL, ".. doesn't exist", "Message", MB_OK);

Это был хитрый подход, который работает, но я не знаю более простого или лучшего метода.

...