tl; dr: Как я могу спросить Windows, каков текущий символ разделителя каталога в системе?
Различные версии Windows, похоже, ведут себя по-другому (например, \
и /
оба работают на английских версиях, ¥, по-видимому, на японской версии, ₩, по-видимому, находится на Корейская версия и т.д.
Есть ли способ избежать жесткого кодирования, а вместо этого попросить Windows во время выполнения?
Примечание:
В идеале решение должно не зависеть от высокоуровневой DLL, такой как ShlWAPI.dll
, потому что библиотеки нижнего уровня также зависят от этого. Поэтому он должен либо зависеть от kernel32.dll
, либо ntdll.dll
или тому подобного... хотя у меня проблемы с поиском чего-либо вообще, будь то на высоком уровне или на низком уровне.
Изменить:
Немного экспериментов сказал мне, что это подсистема Win32 (т.е. kernel32.dll
... или это возможно RtlDosPathNameToNtPathName_U
в ntdll.dll
? не уверен, не тестировал...), которая преобразует косые черты в обратную косую черту, а не ядро. (Префикс \\?\
делает невозможным использование косой черты позже в пути - и собственный API пользовательского режима NT также не работает с косой чертой.)
По-видимому, он не совсем "встроен" в "Windows", а скорее является функцией совместимости, а это значит, что вы не можете просто слепо заменить косые черты вместо обратных косых черт, потому что любая программа, которая случайным образом префикс \\?\
на пути автоматически разрывается на косых чертах.
У меня смешанные чувства по поводу того, какие выводы делать по этому поводу, но я просто подумал, что я упоминаю об этом.
(Я отметил это как "разделитель путей", хотя это технически некорректно, потому что разделитель путей используется для разделения путей, а не каталогов (;
vs. \
). Надеюсь, люди получат то, что я имел в виду. )суб >