我同意上面的帖子。为了使它更容易,这里是您需要使用的代码。在我的拙见中,唯一好的文件名是无空格的文件名。
因此在 c# 代码中我有这个:
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern uint GetShortPathName(
[MarshalAs(UnmanagedType.LPTStr)]
string lpszLongPath,
[MarshalAs(UnmanagedType.LPTStr)]
StringBuilder lpszShortPath,
uint cchBuffer);
public static StringBuilder shortNameBuffer = new StringBuilder(256);
public static string ToShortPathName(string longName)
{
uint result = GetShortPathName(longName, shortNameBuffer, 256);
return shortNameBuffer.ToString();
}
这为您的类添加了一个方法,可以像这样使用:
String goodFileName = ToShortPathName(evilFileName);
注意:我在 UI 中使用它,所以我不介意非线程安全并重用 StringBuider。如果您处于多线程环境中,请确保在您的方法中提取 StringBuilder 分配。