6

「cmd.exe」のような実行可能ファイル名があり、その完全修飾パスを解決する必要があります。PATH環境変数にリストされているディレクトリの1つにexeが表示されることを知っています。PATH 変数の各ディレクトリを解析およびテストせずにフルパスを解決する方法はありますか? 基本的に私はこれをしたくありません:

foreach (string entry in Environment.GetEnvironmentVariable("PATH").Split(';'))
    ...

もっと良い方法があるはずですよね?

4

4 に答える 4

4

あなたはそれをLinqすることができます

string path = Environment
                .GetEnvironmentVariable("PATH")
                .Split(';')
                .FirstOrDefault(p => File.Exists(p + filename));

もう少し読みやすいでしょうか?

ダン

于 2009-09-15T21:28:01.763 に答える
2

さて、私は次のことを見つけました。ただし、管理された実装に固執すると思います。

    static class Win32
    {
        [DllImport("shlwapi.dll", CharSet = CharSet.Auto, SetLastError = false)]
        static extern bool PathFindOnPath([MarshalAs(UnmanagedType.LPTStr)] StringBuilder pszFile, IntPtr unused);

        public static bool FindInPath(String pszFile, out String fullPath)
        {
            const int MAX_PATH = 260;
            StringBuilder sb = new StringBuilder(pszFile, MAX_PATH);
            bool found = PathFindOnPath(sb, IntPtr.Zero);
            fullPath = found ? sb.ToString() : null;
            return found;
        }
    }
于 2009-09-15T22:06:12.543 に答える