Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Функция для создания иерархии каталогов / 20 сообщений из 20, страница 1 из 1
02.08.2017, 14:51
    #39499057
polin11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
Есть ли в С++ функция для создания списка вложенных папок,
например path="my\\my1\\my2" (аналог функции в python os.makedirs(path)), чтобы
создать вложенные каталоги
..my
....my1
.......my2
...
Рейтинг: 0 / 0
02.08.2017, 14:58
    #39499064
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
polin11, нет. Пиши свой алгоритм.
...
Рейтинг: 0 / 0
02.08.2017, 15:03
    #39499069
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
rdb_devПиши свой алгоритм.
алгоритм - это слишком пафосно для такой функции
...
Рейтинг: 0 / 0
02.08.2017, 15:20
    #39499083
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
polin11,

Код: plaintext
1.
2.
3.
#include <boost/filesystem.hpp>
...
boost::filesystem::create_directories("a/b/c");
...
Рейтинг: 0 / 0
02.08.2017, 18:18
    #39499222
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
...
Рейтинг: 0 / 0
03.08.2017, 05:03
    #39499367
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
если я всё правильно понял, в с++17 ожидается:
Код: plaintext
1.
bool std::filesystem::create_directories(const std::filesystem::path&);
...
Рейтинг: 0 / 0
03.08.2017, 17:26
    #39499838
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
CEMbесли я всё правильно понял, в с++17 ожидается:
Код: plaintext
1.
bool std::filesystem::create_directories(const std::filesystem::path&);


g-mkdir-with-parents()
...
Рейтинг: 0 / 0
04.08.2017, 05:09
    #39500044
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
White Owl, а это под виндами работает?
...
Рейтинг: 0 / 0
07.08.2017, 17:49
    #39501446
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
CEMbWhite Owl, а это под виндами работает?Конечно.
...
Рейтинг: 0 / 0
07.08.2017, 22:38
    #39501554
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
polin11Есть ли в С++ функция для создания списка вложенных папок,
например path="my\\my1\\my2" (аналог функции в python os.makedirs(path)), чтобы
создать вложенные каталоги
..my
....my1
.......my2
Если готовая функция не отработает по причине EACCESS то все равно придется разбирать ее
работу step-by-step чтобы понять на каком уровне она упала по причине нехватки привилений.

А это ставит под вопрос полезность такого обобщения.
...
Рейтинг: 0 / 0
07.08.2017, 22:49
    #39501562
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
maytonЕсли готовая функция не отработает по причине EACCESS то все равно придется разбирать ее
работу step-by-step чтобы понять на каком уровне она упала по причине нехватки привилений.
и нужно ли пытаться откатиться при неудаче
...
Рейтинг: 0 / 0
07.08.2017, 23:00
    #39501567
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
ИзопропилmaytonЕсли готовая функция не отработает по причине EACCESS то все равно придется разбирать ее
работу step-by-step чтобы понять на каком уровне она упала по причине нехватки привилений.
и нужно ли пытаться откатиться при неудачеКонечно нет. Чего там откатывать то?
Если мы на уровне Ч получили EACCESS, это значит как минимум уровень Ч уже существует, но мы не можем в нем ничего создавать.
Иными словами, мы получим EACCESS при первой же попытке создать новый подкаталог где-то в пути. А если не получили, то сможем создать и вложенные.
...
Рейтинг: 0 / 0
07.08.2017, 23:21
    #39501575
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
А что вернёт Буст-овская реализация?
...
Рейтинг: 0 / 0
08.08.2017, 07:15
    #39501599
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
White Owl,
Что откатывать - удалять созданные каталоги при невозможности довести дело до конца,
Например - слишком длинный путь если получается
...
Рейтинг: 0 / 0
08.08.2017, 07:28
    #39501600
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
Причем откатывать надо аккуратно. Если завершилось неудачей то
откат
Код: plaintext
1.
/home/polin/my1/my2/

может как-бе почистить даже то что не нужно.
...
Рейтинг: 0 / 0
08.08.2017, 08:25
    #39501614
Gluck_13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
maytonПричем откатывать надо аккуратно. Если завершилось неудачей то
откат
Код: plaintext
1.
/home/polin/my1/my2/

может как-бе почистить даже то что не нужно.

А в условиях конкуренции - еще более аккуратно :)
Например, в этом пути не было папки my1, мы ее создали. Но не факт, что мы ее должны удалить в случае облома при создании папки my2, за это время другой процесс/поток мог создать файл в папке my1.

Здесь была бы очень кстати транзакционная NTFS с функциями типа CreateDirectoryTransacted.
...
Рейтинг: 0 / 0
08.08.2017, 09:31
    #39501643
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
Чем сложнее функция - тем сложнее её ошибки.

В некотором приближении мы могли бы сказать автору что это есть модификация дерева в условиях concurrency
...
Рейтинг: 0 / 0
08.08.2017, 09:42
    #39501645
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
Gluck_13Например, в этом пути не было папки my1, мы ее создали. Но не факт, что мы ее должны удалить в случае облома при создании папки my2, за это время другой процесс/поток мог создать файл в папке my1.

Здесь была бы очень кстати транзакционная NTFS с функциями типа CreateDirectoryTransacted.Зачем изобретать сложности на ровном месте???
rmdir удаляет (только) пустые каталоги и всё, что требуется "в случае конкурентности" - аккуратно обработать ошибку.
...
Рейтинг: 0 / 0
08.08.2017, 21:36
    #39502173
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
Нет.. это просто неприлично!

http://www.cyberforum.ru/cpp-beginners/thread2023367.html

Ох уж этот сайберфорум... Закрывать что-ли всех межфорумных дублей?
...
Рейтинг: 0 / 0
09.08.2017, 05:15
    #39502257
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для создания иерархии каталогов
maytonОх уж этот сайберфорум... Закрывать что-ли всех межфорумных дублей?
Не удается отобразить эту страницу o_O

При этом сам хост пингуется... о_О

Не знаю, что там, но люди обычно, если срочно надо, сразу постят в несколько форумов вопросы.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Функция для создания иерархии каталогов / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]