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;
}