tl;dr: システムの現在のディレクトリ区切り文字を Windows に問い合わせるにはどうすればよいですか?
Windows のバージョンが異なれば、動作も異なるようです (たとえば\
、/
どちらも英語版で動作し、\ は明らかに日本語版で、₩ は明らかに韓国語版で、など...
これをハードコーディングするのを避け、代わりに実行時に Windows に問い合わせる方法はありますか?
ノート:
理想的には、ソリューションは のような高レベルの DLL に依存すべきではありませんShlWAPI.dll
。低レベルのライブラリもこれに依存しているためです。kernel32.dll
したがって、実際には、またはそのようなものに依存する必要がntdll.dll
あります...ただし、高レベルであろうと低レベルであろうと、何も見つけるのに苦労しています。
編集:
ちょっとした実験の結果、カーネルではなく、スラッシュをバックスラッシュに変換するのは Win32 サブシステム (つまり... または、kernel32.dll
おそらく? わからない、テストしていない...) であることがわかりました。(接頭辞を付けると、パスの後半でスラッシュを使用できなくなります。また、NT ネイティブ ユーザー モード API もスラッシュで失敗します。)RtlDosPathNameToNtPathName_U
ntdll.dll
\\?\
どうやらそれはWindowsに完全に「組み込まれている」のではなく、単なる互換性機能です。つまり、バックスラッシュの代わりに盲目的にスラッシュを置き換えることはできません\\?\
。
これに関してどのような結論を下すべきかについて複雑な感情を抱いていますが、私はそれについて言及したいと思いました.
(これを「パスセパレーター」とタグ付けしましたが、これは技術的には正しくありません。パスセパレーターは、ディレクトリではなくパスを分離するために使用されるためです( ;
vs. \
)。