Как преобразовать имя файла с путем к короткому имени файла (стиль DOS) в Adobe AIR?

Как преобразовать имя файла с путем к короткому имени файла (стиль DOS) в Adobe AIR?

Например конвертировать следующий путь

"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 ответа

Решение

Предполагая, что ваша текстовая часть является строковой переменной, вы можете разделить ее, используя "\" в качестве разделителя. Затем у вас будет массив, который вы можете использовать для проверки, если каждый блок длиннее 8 символов. Зацикливая массив, вы можете нарезать последние символы каждого длинного блока и поставить ~1. Поскольку вы находитесь в цикле, вы можете постепенно добавлять во временную переменную все эти изменения, что в итоге даст вам окончательно отредактированный результат.

Единственная сложная часть - обратить внимание на часть.exe в конце.

Итак, на вашем месте я бы начал читать String.split(), String.substring(), цикл, массивы

Вот мой удобный метод, который делает это ниже:

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;
 }
Другие вопросы по тегам