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