kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

ファイルあれこれ

Windows*1ではUnicodeでファイル名を扱うことができます。最近オフショアが盛んなおかげで(?)、気付かないうちにJIS90にない文字が入っているファイル名のファイルを貰っていた…なんてことも珍しくありません。会社で使うユーティリティがUnicodeファイル名に対応していなくて(というよりUnicodeアプリじゃない)、「ごめんなさい」ということもあったり。ファイル名の上限もshellであるexplorerの仕様とWindowsそのものの仕様は違います。
「Windowsでは大文字小文字が区別できないから〜」という話も非常によく聞くのですが、NTFS上では「このボリュームは大文字小文字を区別する」というフラグがあります。NT4.0位まではwinmsd.exeで見えた…と記憶しているのですが、XPのwinmsd.exeでは表示されないですね。Windows APIではGetVolumeInformation()でFILE_CASE_PRESERVED_NAMESとFILE_CASE_SENSITIVE_SEARCHが返却されれば区別されているボリュームでしょう。
代替データストリーム、長いファイル名、(Win32サブシステムで)使ってはいけないファイル名(CON,LPT,COMなどなど)。ふと忘れそうになる属性(NTFS圧縮,EFS暗号化)。特にNTFS圧縮はユーザが使っていないつもりでもOSが自動的に使ってしまう場合もあるので、要注意です。たとえば毎月やってくるパッチでは古いバージョンのファイルをNTFS圧縮したフォルダに格納していますし、クリーンアップウィザードでは「一定期間アクセスしていないファイルを圧縮する」なんて機能があります(OneCareにもありますね)。
ハードリンク、ジャンクション、リバースポイント。Vista/Windows Server 2008以降ではシンボリックリンクもサポートされました。NTFSトランザクションだってあります(トランザクション情報をドライブに書くようです)。
Shellで実装されている特殊フォルダ。たとえばIE用の一時フォルダなどはexeファイルの実行を禁止することもできます。これにセキュリティ設定の話がかかわってくると、ものすごく大変かなぁと。特にサービスで動くようなソフトは。
と、つらつらと書いて思ったけど、ファイルだけで一冊本が書けそうです。

*1:NT系の話