8

「C:\Documents and settings」などの「長い名前」を同等の「短い名前」「C:\DOCUME~1」に変換する標準的なバグ防止方法を探しています。

これは、C# アプリ内から外部プロセスを実行するために必要です。「長い名前」にパスを入力すると失敗します。

4

3 に答える 3

22

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();
    }
于 2008-11-03T11:29:24.373 に答える
4

長いファイル パスを引用符で囲んでも、外部プロセスは失敗しますか? 外部アプリがサポートしている場合、それはより簡単な方法かもしれません。

例えば

myExternalApp "C:\Documents And Settings\myUser\SomeData.file"
于 2008-11-03T12:03:26.037 に答える