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