Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
04.02.2021, 21:55
|
|||
---|---|---|---|
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
Есть путь на диске, разделитель в нём неизвестен. Даже может быть и прямой и обратный слеш в одном пути. Нужно сделать путь абсолютным, но слеш что бы был — прямой слеш. Под Windows. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Но не выходит. Пути `aaa` и `bbb` хорошие выходят. Но слеши не правильные — обратные! И как же это сделать? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
04.02.2021, 23:37
|
|||
---|---|---|---|
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
А распечатай на экране aaa, bbb. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 07:30
|
|||
---|---|---|---|
|
|||
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
petrav И как же это сделать? :) Средствами std::filesystem никак. Для Windows можно все слеши привести к одному, который предпочтителен для Windows, т.е. к обратному слэшу. В методе make_preferred() замена L'/' на L'\\' вообще захардкодена. Просто замени руками: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 11:55
|
|||
---|---|---|---|
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
ъъъъъ petrav И как же это сделать? :) Средствами std::filesystem никак. Для Windows можно все слеши привести к одному, который предпочтителен для Windows, т.е. к обратному слэшу. В методе make_preferred() замена L'/' на L'\\' вообще захардкодена. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 14:04
|
|||
---|---|---|---|
|
|||
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
ъъъъъДля Windows можно все слеши привести к одному, который предпочтителен для Windows, т.е. к обратному слэшу. Вообще-то Windows уже довольно давно всё равно, она работает с обеими слэшами без проблем. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 14:07
|
|||
---|---|---|---|
|
|||
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
Dimitry Sibiryakov ъъъъъДля Windows можно все слеши привести к одному, который предпочтителен для Windows, т.е. к обратному слэшу. Вообще-то Windows уже довольно давно всё равно, она работает с обеими слэшами без проблем. +1 AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 14:22
|
|||
---|---|---|---|
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
Dimitry Sibiryakov ъъъъъДля Windows можно все слеши привести к одному, который предпочтителен для Windows, т.е. к обратному слэшу. Вообще-то Windows уже довольно давно всё равно, она работает с обеими слэшами без проблем. Насколько я помню по чтению документации осталось несколько функций из WinAPI, которые не воспринимают прямые слеши. Плюс я наблюдаю, что WSH не всегда понимает прямой слеш. Но дело не в этом, дело в негибкости std::filesystem. Так что пришлось применить std::replace. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 14:32
|
|||
---|---|---|---|
|
|||
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
petravПлюс я наблюдаю, что WSH не всегда понимает прямой слеш. Так мы же в Си разделе, что нам до какого-то скрипта?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 15:22
|
|||
---|---|---|---|
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
Dimitry Sibiryakov petravПлюс я наблюдаю, что WSH не всегда понимает прямой слеш. Так мы же в Си разделе, что нам до какого-то скрипта?.. К слову пришлось. Это же встроенный в Винду компонент, хоть и устаревший. Это часть Винды. Да и вызывает же он WinAPI. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 15:39
|
|||
---|---|---|---|
|
|||
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
Между "понимает" в предыдущем сообщении и "вызывает" в этом - толстая-толстая прослойка дикого кода. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 16:21
|
|||
---|---|---|---|
|
|||
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
Dimitry Sibiryakov ъъъъъДля Windows можно все слеши привести к одному, который предпочтителен для Windows, т.е. к обратному слэшу. Вообще-то Windows уже довольно давно всё равно, она работает с обеими слэшами без проблем. Я лишь сказал о логике, реализованной в std:: filesystem. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 20:14
|
|||
---|---|---|---|
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 22:09
|
|||
---|---|---|---|
|
|||
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
mayton, при чем тут вики и реализация Windows. ТС хочет средствами std::filesystem управлять значением разделителя директорий в строке пути. Сие - невозможно, ибо классе path член preferres_separator является константным , и определен как бэкслэш для Windows, и как форвардслэш для POSIX. Сие описано "в стандарте". В конкретной реализации (MS VS - 2019) - ещё суровее, например, в make_preferred() не используется даже не preferres_separator, а бессовестно Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 22:35
|
|||
---|---|---|---|
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
ъъъъъ mayton, при чем тут вики и реализация Windows. ТС хочет средствами std::filesystem управлять значением разделителя директорий в строке пути. Сие - невозможно, ибо классе path член preferres_separator является константным , и определен как бэкслэш для Windows, и как форвардслэш для POSIX. Сие описано "в стандарте". В конкретной реализации (MS VS - 2019) - ещё суровее, например, в make_preferred() не используется даже не preferres_separator, а бессовестно Код: plaintext 1.
Я, конечно, видел что preferred_separator константный. Просто перед написанием очередного костыля решил уточнить: а вдруг я что-то не дочитал. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 22:54
|
|||
---|---|---|---|
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
ъъъъъ mayton, при чем тут вики и реализация Windows. ТС хочет средствами std::filesystem управлять значением разделителя директорий в строке пути. Сие - невозможно, ибо классе path член preferres_separator является константным , и определен как бэкслэш для Windows, и как форвардслэш для POSIX. Сие описано "в стандарте". В конкретной реализации (MS VS - 2019) - ещё суровее, например, в make_preferred() не используется даже не preferres_separator, а бессовестно Код: plaintext 1.
Потому-что тема топика - Windows. А там - самые хитрые правила работы с Path. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 23:08
|
|||
---|---|---|---|
|
|||
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
ъъъъъклассе path член preferres_separator является *константным* Но у его конструкторов есть второй параметр. О котором аффтар и не дочитал. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 23:12
|
|||
---|---|---|---|
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
Dimitry Sibiryakov ъъъъъклассе path член preferres_separator является *константным* Но у его конструкторов есть второй параметр. О котором аффтар и не дочитал. Читал, оно не помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2021, 23:53
|
|||
---|---|---|---|
|
|||
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
petrav Dimitry Sibiryakov пропущено... Но у его конструкторов есть второй параметр. О котором аффтар и не дочитал. Читал, оно не помогает. По справедливости говоря, вы не дали ошибку. Вы только сказали что "не в ту сторону" для вас визуально. Вот например, в Qt слеши визуально это внутреннее представление пути. Хоть вертикальные черточки с:|темп. Кроссплатформенность обязывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2021, 09:20
|
|||
---|---|---|---|
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
Метод std::filesystem::path::generic_string() возвращает строку с разделителями в стиле Линукс. Код: plaintext 1.
Странно что не работает второй аргумент конструктора std::filesystem::path. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2021, 09:33
|
|||
---|---|---|---|
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
Всё с обратными слешами не смотря на fs::path::format::generic_format. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2021, 15:38
|
|||
---|---|---|---|
|
|||
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
generic_format (since C++17)? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.09.2021, 16:58
|
|||
---|---|---|---|
|
|||
MSVC + std::filesystem: разделители пути в стиле Linux |
|||
#18+
Вот интересно. В MSVS-2019, если для C++ проекта определить С++ Language Standard как ISO C++17 Standard (/std:c++17), нэймспейс filesystem доступен как std::filesystem. А если определить ISO C++20 Standard (/std:c++20), то нэймспейс filesystem доступен как std::experimental::filesystem. Как в предыдущем (перед С++17) стандарте. Что за фигня. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
Start [/forum/topic.php?fid=57&mobile=1&tid=2017173]: |
0ms |
get settings: |
21ms |
get forum list: |
8ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
40ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
362ms |
get tp. blocked users: |
0ms |
others: | 305ms |
total: | 742ms |
0 / 0 |