ようこそ 屋根裏部屋 mkII へ ログイン | 登録 | ヘルプ

Technological

ちょっとしたTIPSや私がはまったこと、調べたことなんかを書いていきます。

.NET Frameworkでのファイル最大長

Windowsのファイル名の最大長考察で最大ファイル名を少し試してみました。最後のPowerShellでより長いファイル名が扱えないということが疑問だったので、.NET Frameworkで試してみましょう。

   1:      FileInfo fi = new FileInfo(@"c:\temp");
   2:      DirectoryInfo di = new DirectoryInfo(@"c:\temp");
   3:      FileInfo[] files = di.GetFiles("*.txt");
   4:   
   5:      foreach (FileInfo oneFile in files) {
   6:          Console.WriteLine("{0}, {1}", oneFile, oneFile.FullName.Length);
   7:      }

 

前回のプログラムで作った\\?\形式でないとアクセスできないファイルをこのロジックに通すと、FullNameプロパティでSystem.IO.PathTooLongException例外が発生します。

PowerShellは例外が発生したオブジェクトは内部で管理しないから(?)Get-Itemで表示されないんでしょうかね。

.NET Frameworkがこういう実装ってことは、長いファイルを扱うことになる場合、MS-DOS互換用に生成されている、8+3形式のファイル名にする、フォルダの階層が深い場合、途中のフォルダをネットワークドライブとしてマウントすればなんとか回避可能です(KB320081にもそういう回避方法が例示されています)。

COM,CLOCK,LPT,AUX,PRTといった、DOS互換のために残されている使ってはいけないファイル名だと\\?\形式で削除できる可能性があります。Windows版IBM-PC版の時計アプリはCLOCK.EXEだったけど、PC-9801ではCLOCKがデバイス名として予約されていたので、TOKEI.EXEに改名されたのは有名な話。Windows 95ではCLOCK.EXEそのものがなくなりましたが。

公開 2007年12月17日 1:31 投稿者 kkamegawa
タグ , , , ,

コメントの通知

この投稿にコメントが付いた場合にメールを受信するには、登録してください。ここ

また次のフィードから、お気に入りのRSSリーダーを使って最新の状態を知ることもできます。 コメントのRSSフィード

コメント

コメントはありません

どのような感想ですか?

(必須) 
必須 
(必須) 
Powered by Community Server, by Telligent Systems