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