備忘:C#でちょっとヘンなところ。【撤回】


 このエントリを書いたときには完全にボケていた。
 事実誤認に基づく曲解が含まれておりデタラメなので撤回する。

 自分への戒めとしてこのまま晒しておくが、内容はダメのダメダメなので読まないで下さい(爆)


久しぶりに(年甲斐もなく)ちょっと小さなツールを作っていた。

ディレクトリを指定して、子どものディレクトリを全部ナメて、jpegファイルを探して、EXIFが付いていたらその撮影日を取得してファイル名をリネームし…みたいな、ありがちなものなのだが。

(1) C#のコマンドライン引数の解釈、ヘンじゃないか?
 
特になにも考えずに
Main(string[] args)
で、args[0]、args[1]と取ろうとしたら、値が期待とずれている。

foo "C:\Program files\" "c:\bar baz\dammy.log"

とやった場合、第一パラメータ "C:\Program files\" は

C:\Program と files"

と解釈されるようだ。

ようするに、2個目の\がリテラルのエスケープと解釈されてるわけだが、これって前(Win32)からそうだったけ? ちなみにEnvironment.GetCommandLineArgsを通しても同じ解釈である。

まあ、

foo "C:\Program files" "c:\bar baz\dammy.log"

にすりゃ良いといえば良いのだが、なんか違和感を感じるんだよなぁ。

(2) System.IO.PathTooLongException

もうひとつ、こっちはちょっと俺的には致命的。
System.IO.FileやDirectoryでは、例えばFileInfoなどでSystem.IO.PathTooLongExceptionつー例外があって、これ見逃してたのだが、いわゆるLong UNCつーの? MAX_PATHの制限があいかわらず260バイトなんだな。

 これは困った。

 深いディレクトリ(作れてるんだからOSは一応サポートしてるはず。エクスプローラとかでも操作はできないが)が.NETからだと読めない書けない (つーか実現する手段が思い浮ばない)。
System.IO.FileやDirectoryはstaticなのでInheritもできないし、けっきょくWin32のお世話にならなきゃいけないの?

…Win32のラッパ作るほど暇ではないので、.NETにはお引き取り願った今日この頃です(爆)
[PR]
by signal-9 | 2012-06-25 17:52 | TIPSとかKludgeとか
<< 近デジ PDFで全部ダウンロー... 『妖怪手品の時代』(横山泰子著... >>