Как преобразовать имя файла с путем к короткому имени файла (стиль DOS) в Adobe AIR? - PullRequest
4 голосов
/ 12 февраля 2010

Как преобразовать имя файла с путем к короткому имени файла (стиль 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 ]

2 голосов
/ 18 августа 2011

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

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

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

1 голос
/ 07 мая 2014

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

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;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...