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