GetLongPathName和GetShortPathName
https://baike.so.com/doc/539063-570712.html
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetShortPathName(
[MarshalAs(UnmanagedType.LPTStr)]string path, //指定的要转换的路径
[MarshalAs(UnmanagedType.LPTStr)]StringBuilder short_path, //接收短路径形式的缓冲区
int short_len //缓冲区的长度
);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetLongPathName(
[MarshalAs(UnmanagedType.LPTStr)]string short_path,
[MarshalAs(UnmanagedType.LPTStr)]StringBuilder long_path,
int long_len
);
const int MAX_PATH = 260;//windows 允许路径的最大长度就是 260 个字节
/// <summary>
/// 获取路径的短路径
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static string GetShortPath(string name)
{
StringBuilder short_name = new StringBuilder(MAX_PATH);
int lenght = GetShortPathName(name, short_name, MAX_PATH);
if (lenght == 0)
{
return name;
}
return short_name.ToString();
}
/// <summary>
/// 获取短路径的全路径
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static string GetLongPath(string name)
{
StringBuilder long_name = new StringBuilder(MAX_PATH);
int lenght = GetLongPathName(name, long_name, MAX_PATH);
if (lenght == 0)
{
return name;
}
return long_name.ToString();
}
private void button17_Click(object sender, EventArgs e)
{
//string filename = @"D:\Program Files\AisinoMgr\FUNCTION\YBDK\regsvr32\SOFAtl.dll";
//string filename = @"F:\Books\Doing\DotNet\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\SOFAtl.dll";
string filename = @"D:\SOFAtl.dll";
string shortname= GetShortPath(filename);
string longname = GetLongPath(shortname);
}