Крылатый
Я думаю, проблема в инфраструктуре.
Vladislav
чтобы ответом на вопрос "как сделать x" было "подключи либо y такой-то командой", а не "подожди стандарта c++42, в котором в стандарт включат еще 10 новых библиотек"
Крылатый
Тянуть буст не так уж и легко, что и демотивирует, собственно.
Anonymous
Алексей, вы не поняли. std::filesystem (ну или boost::filesystem) не способны кроссплатформенно полноценно обслужить все потребности для какого нибудь файлового менеджера
Крылатый
Подключай его просто в настройках проекта + инклуд и всё было бы збс.
Крылатый
Писали бы как в расте/хаскеле и бед не знали бы.
babysitter
ну или хотя бы какой-нибудь менеджер пакетов
babysitter
cpp install boost::filesystem
Крылатый
ib4: их 100500, но всё око как-то не оч.
Крылатый
А всё потому что структура проекта нефиксированная.
Alexey
Алексей, вы не поняли. std::filesystem (ну или boost::filesystem) не способны кроссплатформенно полноценно обслужить все потребности для какого нибудь файлового менеджера
а мне не надо все возможности файлового менеджера. мне нужно хотя бы нормальные манипуляции с файлами. одинаковые везде и гарантированно работающие.
Крылатый
Кто во что горазд, и все юзают свои системы сборки и т.д.
Vladislav
Писали бы как в расте/хаскеле и бед не знали бы.
как в расте/хаскелле/руби/питоне/перле/го/жс/жаве/ц#, ты хотел сказать
babysitter
поитерировать по каталогу, да
Крылатый
Vladislav
c++ - практически единственный из живых языков, у которого напрочь отсутствует нормальная инфраструктура для либ :(
Крылатый
поитерировать по каталогу, да
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78346
Крылатый
=)
Vladislav
Да, где инфраструктура не отделена от языка.
она почти во всем из списка отделена, но присутствует (у многих - несколько альтернатив)
Anonymous
Алексей, ну даже это не возможно) взять какой нибудь линукс - там приседания вокруг прав доступа. взять виндовс - там приседания вокруг ссылок и прав для манипуляций ими. поймите, это не зависит от языка. если нужна качественная работа с файловой системой - то приседания будут на любых языках. и все они приведут к системному апи в итоге. или будет некачественная халтьура, которая способна работать только в очень ограниченном количестве кейсов
Alexey
Алексей, ну даже это не возможно) взять какой нибудь линукс - там приседания вокруг прав доступа. взять виндовс - там приседания вокруг ссылок и прав для манипуляций ими. поймите, это не зависит от языка. если нужна качественная работа с файловой системой - то приседания будут на любых языках. и все они приведут к системному апи в итоге. или будет некачественная халтьура, которая способна работать только в очень ограниченном количестве кейсов
Так, стоп. не в каждой задаче есть такие приседания, иногда нужно просто скопировать/создать файл в каталоге и забыть. и я не хочу ради этого тащиться в наследие Си или вытаскивать буст, или давайте откроем API винды.. обернем его сами как нам надо, напишем обертку и для линукса,.. а мы еще и в маке рабоатем, круто, давайте завернем в обертку для него тоже. boost::filesystem сейчас с этими простыми задачами прекрасно справляется в нормальном С++ стиле. Да, если мне нужны специфические манипуляции с файлами, я конечно пойду и позову кусок API фс конкретной системы и сделаю что хочу.
Max
это реально демотивирует
Естественный отбор
Anonymous
Алекс, я бы не был бы так уверен в этом
babysitter
Естественный отбор
за это плюсовиков и не любят - элитка не прорвался через костыли и геморрой - ниосилятор
Alexey
Алекс, я бы не был бы так уверен в этом
проверено в работе на проекте реально работающем на 3х системах, использует boost::filesystem. Манипуляции для винды специфические сделаны с помощью API винды, да. Но они очень легко интегрировались. В общем, я остался доволен вполне
babysitter
хуже только у эрланга наверное. там все думают, что они боги и им должны платить сумасшедшие деньги за их уникальный и неповторимый скилл
Anonymous
Алекс, взять винду. там можно на файлы вешать скрытые потоки. большинство файловых менеджеров теряют информацию об этих потоках при копировании. и я не уверен, что boost::filesystem способна сделать копию без потерь данных. а с потерями можно обычным std::iostream без проблем скопировать
Alexey
Алекс, взять винду. там можно на файлы вешать скрытые потоки. большинство файловых менеджеров теряют информацию об этих потоках при копировании. и я не уверен, что boost::filesystem способна сделать копию без потерь данных. а с потерями можно обычным std::iostream без проблем скопировать
Можно, а Вам это правда всегда нужно? Вот задача: пользователь хочет сохранить документ, отредактировать, закрыть, вы должны в фоне отследить изменение и залить куда-то к себе , обновить версию и уведомить других пользователей, работающих над этой же задачей/документом
Anonymous
ну вот отследить изменения std::filesystem не умеет. она вообще не имеет никакого отношения к портам завершения
Anonymous
и я вообще не знаю ни одну библиотеку для работы с фс, которое бы такое кросс-платформенно умела бы. на винапи это делается элементарно
Anonymous
дата изменения файла - это не то же самое, что отследить изменение в файловой системе
Anonymous
и кстати, дату изменения файла умеет сишное наследние. я только не помню точно функцию
Alexey
и кстати, дату изменения файла умеет сишное наследние. я только не помню точно функцию
умеет, да :) В данной задаче достаточно даты измнения файла вполне. не надо усложнаять. ДА, можно вешать колбеки на модификацию файла на фс, но перебором не кажется?)
Alexey
в любом случае с офисными документами будет другая проблема, но это уже за рамки обсуждения и относится к особенностям работы офиса от МС
Anonymous
перебором - это какой то треш. и да - ссылки. пользователь воткнул симлинку/хардлинку. и привет админским правам под виндой
Anonymous
и вот здесь std::filesystem опять лососнула
Yevhen
бонусный вопрос: чем плох код f(shared_ptr<T> (new T(...)), g()), помимо производительности?
Потенциальными утечками памяти. Порядок вызова не определен. Может сразу отработать new, потом функция и только потом созданный new указатель будет передан во владение shared_ptr. Таким образом, если функция выбросит исключение, то указатель на уже выделенный ресурс будет утерян. Следовательно утечка памяти.
Anonymous
а... хотя просто чекнуть информацию о ссылке вроде бы прав не требует. ну да, тогда можно
babysitter
к черту плюсы эти, если все можно через системный апи забыдлить давайте на си писать
Alexey
в винде и линкусе
babysitter
высокоуровневые абстракции какие-то
Vladislav
++
babysitter
странные
Vladislav
высокоуровневые абстракции какие-то
совсем уже обленились, да
Anonymous
кто зажрался
Anonymous
кто обленился?
Anonymous
Алексей, плохо умеет. простой пример: я создаю симлинку из командной строки: mklink ... потом пытаюсь чекнуть её при помощи boost::filesystem. ну так вот, он не распознает её как симлинку. а под виндой требуются права администратора, для её создания силами самого boost::filesystem
Anonymous
либо на С
Anonymous
на линуксах свои проблемы)
Anonymous
эт.. господа.. у нас тут предстоит проектит под линуху... а у нас никто не кодил под нее
Anonymous
порекомендует кто нижки чтоль?
Anonymous
да я уже представляю
Anonymous
серверная часть на С панель на питоне
Alexey
http://www.ozon.ru/context/detail/id/31934003/
babysitter
может быть там не все так системоспецифично..
Anonymous
я хочу сказать, что фс очень сильно завязана на особенности платформы. я пробовал делать кросс-платформеные скрипты на питоне. и все равно в итоге пришлось пасти платформу. я хочу сказать, что отсутствие универсальной библиотеки для работы с фс - это не языковая проблема.
Anonymous
а то что есть - оч сильно ограниченно в своих возможностях
Anonymous
http://www.ozon.ru/context/detail/id/31934003/
поставил на загрузку
Kirill
в некоторых устройствах нет фс вообще
Alexey
я хочу сказать, что фс очень сильно завязана на особенности платформы. я пробовал делать кросс-платформеные скрипты на питоне. и все равно в итоге пришлось пасти платформу. я хочу сказать, что отсутствие универсальной библиотеки для работы с фс - это не языковая проблема.
Это понятно, когда у тебя задачи чуть сложнее чем в текущей директории скопировать файлик. Но веть таких элементарных задач море и они встречаются часто. хочется делать их простым понятным С++ way. Я вот к чему. Поэтому и неплохо иметь std:filesystem
Anonymous
Алексей, не спорю. std::filesystem - штука очень полезная. я сам с нетерпением жду с++17 )) Вообще, это удивительно, но как ни пытался, так и не смог найти ни одной хорошей альтернативы boost::filesystem
babysitter
вроде кто-то хорошо отзывался об одной, могу поискать
Anonymous
поищите)
Светомеч
Не юзал boost::filesystem
babysitter
я впомнил, что слышал это где-то в первых десяти эпизодах cpp каста, но не представляю в каком
Anonymous
да обычные: итерация по файловой системе. создание/удаление/копирование/ссылки/информация о файле
babysitter
не понял этой фразы
он думал, что boost::filesystem не имеет отношения собственно к файловой системе, а по функциональности будет альтернативой файловым потокам плюсовым
Anonymous
а...)