Форум программистов, компьютерный форум, киберфорум
Наши страницы
Boost C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Avazart
Эксперт С++
7723 / 5632 / 549
Регистрация: 10.12.2010
Сообщений: 25,402
Записей в блоге: 17
1

boost::filesystem Относительный путь

11.02.2013, 21:29. Просмотров 1922. Ответов 4
Метки нет (Все метки)

Допустим есть путь
C:\A\B\D\e.txt
Можно ли (и как ?) получить путь относительно другого пути ( или текущего каталога ) к примеру каталога B т.е
Код
D\e.txt
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2013, 21:29
Ответы с готовыми решениями:

boost filesystem
Всем привет! В студии при построении проекта с подключенным...

boost::filesystem
Доброго времени суток. Подскажите пожалуйста, как можно преобразовать path в...

boost.filesystem
Всем привет! Проблема в следующем. Если пытаюсь скомпилировать код,...

boost::filesystem и искючения
При поиске файлов к примеру на диске C:\ можно получить к примеру такое...

не могу разобраться c boost.filesystem
не как не могу разобрать с boost.filesystem. Нужно записать содиржимое католога...

4
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
12.02.2013, 00:53 2
Все что возможно описано тут http://www.boost.org/doc/libs/1_53_0...position-table
0
Avazart
Эксперт С++
7723 / 5632 / 549
Регистрация: 10.12.2010
Сообщений: 25,402
Записей в блоге: 17
12.02.2013, 01:42  [ТС] 3
Цитата Сообщение от ForEveR Посмотреть сообщение
Все что возможно описано тут http://www.boost.org/doc/libs/1_53_0...position-table
Т.е. нет, как я понимаю
0
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
12.02.2013, 02:40 4
Avazart, с replace можно поиграться...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <fstream>
#include <iostream>
#include <boost/filesystem.hpp>
#include <boost/algorithm/string.hpp>
 
int main()
{
    namespace fs = boost::filesystem;
 
    const std::string file = "C:\\Games\\Carma\\test.txt";
    std::ofstream ifs(file.c_str());
    if (!ifs)
    {
        std::cerr << "Error" << std::endl;
        std::cin.get();
        return 1;
    }
    ifs.close();
    fs::path path(file);
    std::cout << path.string() << std::endl;
    while (!path.empty())
    {
        std::string new_n = path.relative_path().string();
        boost::replace_first(new_n, "\\", ":");
        if (new_n == path.relative_path().string())
        {
            break;
        }
        path = fs::path(new_n);
        new_n = path.string();
        boost::replace_first(new_n, ":", "\\");
        std::cout << new_n << std::endl;
    }
    std::cin.get();
}
А только с помощью fs кажись нет.

Добавлено через 4 минуты
Ну или отрезать filename, и потом до тех пор пока не нашли нужную папку делать parent_path...
0
igorrr37
1867 / 1483 / 751
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
07.04.2013, 16:25 5
Я как то делал такое через path::iterator, std::mismatch и /=. Вот такая ф-ция была
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void Transfer()
    {
        std::string sFilePath, sSavePath;
        std::cout << "Input path to file/directory\n";
        std::getline(std::cin, sFilePath);
        std::cout << "Input path to save file/directory to server\n";
        std::getline(std::cin, sSavePath);
        bfs::path filePath(sFilePath), savePath(bfs::path(sSavePath) / filePath.filename());
        if(bfs::exists(sFilePath) && bfs::is_directory(sFilePath))
        {
            TransferDirectory(filePath, savePath);
            bfs::path origFilePath, resultSavePath;
            std::pair<bfs::path::iterator, bfs::path::iterator> pair;
            for(bfs::recursive_directory_iterator rdib(sFilePath), rdie; rdib != rdie; ++rdib)
            {
                origFilePath = rdib->path();
                pair = std::mismatch(origFilePath.begin(), origFilePath.end(), filePath.begin());
                resultSavePath = savePath;
                for(auto ib(pair.first), ie(origFilePath.end()); ib != ie; ++ib)
                {
                    resultSavePath /= *ib;
                }
                if(bfs::is_directory(origFilePath))
                    TransferDirectory(origFilePath, resultSavePath);
                else
                    TransferFile(origFilePath, resultSavePath);
            }
        }
        else
        {
            TransferFile(filePath, savePath);
        }
    }
3
07.04.2013, 16:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2013, 16:25

Не удается подключить boost::filesystem
Решил начать изучать boost::filesystem - в итоге ошибки линковщика. Делал все...

Boost::filesystem::copy_file не копирует файлы
Вот код:#include &lt;iostream&gt; #include &lt;vector&gt; #define...

[Code::Blocks] Не работает Boost.Filesystem
Есть скомпилированный Boost (MinGW 6.3.0), Code::Blocks 16.01, Boost 1.65. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru