「C:\Documents and settings」などの「長い名前」を同等の「短い名前」「C:\DOCUME~1」に変換する標準的なバグ防止方法を探しています。
これは、C# アプリ内から外部プロセスを実行するために必要です。「長い名前」にパスを入力すると失敗します。
Windows API 関数の呼び出しを開始する準備ができている場合は、GetShortPathName() と GetLongPathName() がこの機能を提供します。
http://csharparticles.blogspot.com/2005/07/long-and-short-file-name-conversion-in.htmlを参照してください。
const int MAX_PATH = 255;
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetShortPathName(
[MarshalAs(UnmanagedType.LPTStr)]
string path,
[MarshalAs(UnmanagedType.LPTStr)]
StringBuilder shortPath,
int shortPathLength
);
private static string GetShortPath(string path) {
var shortPath = new StringBuilder(MAX_PATH);
GetShortPathName(path, shortPath, MAX_PATH);
return shortPath.ToString();
}
長いファイル パスを引用符で囲んでも、外部プロセスは失敗しますか? 外部アプリがサポートしている場合、それはより簡単な方法かもしれません。
例えば
myExternalApp "C:\Documents And Settings\myUser\SomeData.file"