寻找标准的无漏洞方法,将“长名称”(如“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();
}
MAX_PATH
的路径进行缩短,这似乎会失败(返回空)。 - user17753即使您将长文件路径用引号括起来,外部进程是否仍然失败? 如果外部应用程序支持,则这可能是一种更简单的方法。
例如:
myExternalApp "C:\Documents And Settings\myUser\SomeData.file"