2022-08-26 (金)
https://github.com/binzume/dkango
ディレクトリ周りやファイルのリネームとか対応してテストしてたのだけど,Goで実装されたプログラムがディレクトリにアクセスするときに,FILE_NON_DIRECTORY_FILEフラグをつけてCreateFile()して,失敗したらディレクトリとして開き直しているように見える.
よく意図が分からない挙動なのでGoのソースを見ると Open() の中で通常ファイルかディレクトリか判定していて,さらに空ディレクトリかどうかチェックするためにFindFirstFile()してるな...Open()は1回のAPI呼び出しかと思い込んでいたけど空のディレクトリにアクセスする場合は4回ファイルにアクセスしているように見える.特にディレクトリOpenするの,ほとんどの場合は ReadDirするためで,事前にFindFirstFileするの無駄そうだけど,なんでOpen()の中でやってるんだろ.