Получить символ разделителя каталогов в Windows ? ('\', '/' и т. д.)

tl; dr: Как мне спросить Windows, какой в ​​настоящее время символ разделителя каталогов в системе?


Похоже, что разные версии Windows ведут себя по-разному (например, \ и / работают с английскими версиями, ¥ явно используется в японской версии, ₩ явно используется в корейской версии. и т. Д.

Есть ли способ избежать жесткого кодирования этого и вместо этого спрашивать Windows во время выполнения?

Примечание:

В идеале решение должно не зависят от высокоуровневой библиотеки DLL, такой как ShlWAPI.dll , потому что библиотеки нижнего уровня также зависят от этого, поэтому на самом деле она должна зависеть либо от kernel32.dll , либо ntdll. dll или подобное ...хотя у меня вообще возникают проблемы с поиском чего-либо , будь то на высоком или низком уровне.

Правка:

Небольшой эксперимент показал мне, что это подсистема Win32 (т.е. kernel32.dll ... или, возможно, RtlDosPathNameToNtPathName_U в ntdll.dll ? Не уверен, не тестировал ...), который преобразует прямые косые черты в обратные, а не ядро. (Префикс \\? \ делает невозможным использование косой черты позже в пути - и собственный API пользовательского режима NT также не работает с косой чертой.)

Так что, очевидно, это не совсем "построено" в "Windows, а это просто функция совместимости - это означает, что вы не можете просто слепо подставлять косую черту вместо обратной косой черты, потому что любая программа, которая случайным образом добавляет префиксы \\? \ к путям, автоматически прерывается на косые черты .

У меня смешанные чувства по поводу того, какие выводы по этому поводу сделать, но я просто подумал, что упомяну об этом.

(Я пометил это как «разделитель путей», хотя это технически неверно, потому что разделитель путей используется для разделения путей , а не каталогов (; vs. \ ). Надеюсь, люди уловили то, что я имел в виду.)

21
задан Mehrdad 6 September 2011 в 05:52
поделиться