2006/10/27

GetShortPathName

長いファイル名を短いファイル名に変換します。

.Net にはこの変換手続きがないので kernel32.dll を使います。こんな感じ。

[DllImport("kernel32.dll")]
extern static int GetShortPathName(string s1, StringBuilder s2, int i1) ;

public static string Long2Short(string long_pass)
{
StringBuilder short_pass = new StringBuilder(260);
System.Diagnostics.Process process = new System.Diagnostics.Process();
GetShortPathName(long_pass, short_pass, short_pass.Capacity) ;

return short_pass.ToString();
}


で、戻り値に注意しないといけないのですが、実はこの関数は実在するファイル・ディレクトリしか変換してくれないんですね。ということは実在しないファイルを指定するとどうなるか、空が帰ってきます。

これで、はまってしまいました。 fileOpen のときは問題ないのですが fileSave のとき新規に保存しようとすると処理に失敗してしまいます。調べてみるとまだ存在しないファイルなので変換が行われずコケていたと言う落ちでした。

0 件のコメント: