代码之家  ›  专栏  ›  技术社区  ›  Maksym

如何在AdobeAir中将文件名与路径转换为短文件名(DOS样式)?

  •  4
  • Maksym  · 技术社区  · 14 年前

    如何在AdobeAir中将文件名与路径转换为短文件名(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"
    

    有什么算法吗?

    2 回复  |  直到 10 年前
        1
  •  2
  •   Kumsal Obuz    13 年前

    假设您的文本部分是字符串变量,您可以使用“\”作为分隔符来拆分它。然后,您将拥有一个数组,可以使用该数组检查每个块是否超过8个字符。循环数组时,可以切掉每个长块的最后一个字符并放入~1。因为您在循环中,所以您可以逐步将所有这些更改添加到临时变量中,这些更改将在最后为您提供最终的编辑结果。

    唯一有点棘手的部分是注意结尾的.exe部分。

    所以,如果我是你,我会开始读string.split(),string.substring(),for循环,数组

        2
  •  1
  •   technocrusaders.com    10 年前

    下面是我的简便方法:

    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;
     }
    
    推荐文章