如何在 Adobe AIR 中将带路径的文件名转换为短文件名(DOS 样式)?
例如转换下一个路径
"C:\Program Files\Common Files\Adobe AIR\Versions\1.0\Resources\Adobe AIR Updater.exe"
至
"C:\PROGRA~1\COMMON~1\ADOBEA~1\VERSIONS\1.0\RESOUR~1\ADOBEA~1.EXE"
有什么算法吗?
如何在 Adobe AIR 中将带路径的文件名转换为短文件名(DOS 样式)?
例如转换下一个路径
"C:\Program Files\Common Files\Adobe AIR\Versions\1.0\Resources\Adobe AIR Updater.exe"
至
"C:\PROGRA~1\COMMON~1\ADOBEA~1\VERSIONS\1.0\RESOUR~1\ADOBEA~1.EXE"
有什么算法吗?
假设您的文本部分是一个字符串变量,您可以使用“\”作为分隔符来拆分它。然后,您将拥有一个数组,可用于检查每个块是否超过 8 个字符。在循环数组时,您可以切掉每个长块的最后一个字符并放入 ~1。由于您处于循环中,您可以逐步将所有这些更改添加到临时变量中,这将在最后为您提供最终的编辑结果。
唯一有点棘手的部分是注意最后的 .exe 部分。
所以,如果我是你,我会开始阅读 String.split()、String.substring()、for 循环、数组
这是我在下面执行此操作的便捷方法:
public static string GetShortPathName(string path)
{
string[] arrPath = path.Split(System.IO.Path.DirectorySeparatorChar);
path = arrPath[0]; // drive
// skip first, ( drive ) and last program name
for (int i = 1; i < arrPath.Length - 1; i++)
{
string dosDirName = arrPath[i];
if (dosDirName.Count() > 8)
{
dosDirName = dosDirName.Substring(0, 6) + "~1";
}
path += System.IO.Path.DirectorySeparatorChar + dosDirName;
}
// include program name if any
path += System.IO.Path.DirectorySeparatorChar + arrPath[arrPath.Length - 1];
return path;
}