レアケースだと思われるが、フルパスが260文字を超えるケースでのファイルコピーが発生したときにどうするか、という問題に取り組んでいる。
NTファイルシステム上は32000まで行けるらしいが、なぜか.Netでは行き届かず、260文字を超える場合はPathTooLongExceptionを吐く。

.Netとしての回避策はない。。。

とりあえずコピー周りだけさして、あとは.NETで出来るだけ対応しようと思い、
[DllImport("kernel32.dll", EntryPoint = "CopyFileW", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern bool CopyFile(string source, string destination);
やCreateDirectoryなどのUnicode版のなんとかW関数をImportしたメソッドを作成。

ところが、8.3形式に直したヤツらでDirectoryInfoなどを取得すればなんとかなるか、と思っていたら、やってくれるぜ、.NET、内部でロングロングパスに戻してInnerExceptionを吐いてくれるというなんとも行きとどいた気配り。

しかたなく、FindFirstFileなどを作成、
[DllImport("kernel32.dll", EntryPoint = "FindFirstFileW", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr FindFirstFile(string fileName, out PathInformation fileData);
こいつらを色々とWrapしたりして疑似FileInfo、DirectoryInfoなどを作成する。

こんなに長々と宣わる暇とのうはうがあるのであれば、Exceptionを投げないよう改造する方を先にしてほしいのだが。
http://blogs.msdn.com/bclteam/archive/2007/03/26/long-paths-in-net-part-2-of-3-long-path-workarounds-kim-hamilton.aspx

ちょろっとお手軽ツールを作るなら.Netが便利だが、マニアックなことをしようとするとやはりWin32APIをネイティヴに呼び出すヤツらを作った方がいいということか。

放置しているVC++入門を開いてみようっと。

フォレンジック調査サービス、内容更新。Atolaのパスワード解除がEndurastarに対応しました。カーナビなどにどうぞ。Eディスカバリー(米国訴訟における電子データ情報開示支援)。