現在、次の P/Invoke シグネチャを使用して、通常の Windows ファイルの短いファイル名を取得しています。
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetShortPathName([MarshalAs(UnmanagedType.LPTStr)] string path,
[MarshalAs(UnmanagedType.LPTStr)] StringBuilder shortPath,
int shortPathLength);
現在 - 問題なく動作していますが、かなり奇妙なことに気付きました: Windows は次の短いファイル名規則
を使用していることを知っています:
名前を 6 文字に切り詰める (拡張子なし)チルダ( )を
追加 する 一致インデックスを示す符号なし整数を追加する (1 から始まる) 元のファイル拡張子を追加する~
したがって、ファイル名C:\abcdefghijklmn.txt
は短い名前でアクセスできる必要がありますC:\abcdefg~1.txt
。(これは完全に正常に機能しています。)
ここで奇妙な点: 最近、音楽ディレクトリ内で特定のオーディオ ファイルを少し検索しました。これが結果でした:
.\Rammstein & Tatu - Moscow.mp3
.\Rammstein - Asche zu Asche.mp3
.\Rammstein - Der Meister.mp3
.\Rammstein - Du Hast.mp3
.\Rammstein - Eifersucht.mp3
.\Rammstein - Feuer Frei.mp3
.\Rammstein - Führe Mich.mp3
.\Rammstein - Haifisch.mp3
...
そして短い表記法で同じ検索:
.\RA8E17~1.MP3
.\RA23A6~1.MP3
.\RAMMST~1.MP3
.\RA0CAE~1.MP3
.\RAMMST~2.MP3
.\RAMMST~3.MP3
.\RAMMST~4.MP3
.\RA6BAA~1.MP3
...
私の質問は次のとおりです。ウィンドウがチルダの前にそのような「ランダムな」プレフィックスを生成するのはなぜですか (RA23A6
やなどRA0CAE
)?