ホーム ] TIPS ] ソフトウェア実験室 ]

上へ
ビットマップの処理速度
色変換速度
数式演算速度
冪乗演算速度
検索速度
文字列処理速度
文字列/数値処理速度
CPU演算速度
TicksとPerformance Counter
文字の数値化
数値化文字の再現
数値化文字の補間
補間の効果
ネイピア数
ネイピア数2
指数関数近似値
級数の収束速度1
級数の収束速度2
級数の精度
逆三角関数を求める
算術幾何平均でπを求める
全フォルダ列挙
ビットマップとメモリリソース
配列とメモリリソース

ソフトウェア実験室

全フォルダ列挙

最終更新:2005/12/23 新規

 システムの存在する全てのフォルダを列挙して見る。これは、全ファイルの列挙と同じ手法で良い。

●原理/方法

  • 列挙した結果はツリー表示する。表示はフォルダ名のみ。
  • 処理としては、親フォルダが与えられると、その全ての子フォルダ(孫以下には行かない)を列挙する関数を再帰呼び出しすれば良い。
  • この場合、ツリーの全容が予め分かっていないので、T0107 ツリービューを作成する のような方法は採用できなく、ダイナミックなオブジェクトの利用を行う。

●手順

  1. 始まりはドライブとする。全ドライブ情報を獲得
  2. Readyなドライブについて、展開する。
  3. 再帰呼び出しなので、ドライブ単位で呼び出せば終了。

●結果

●考察

 得られることは分かったが、一気に展開する方法は、マシンやドライブによっては時間が掛かりすぎる。ユーザに任意のフォルダを選ばせるような用途には使えない方法と言える。

●実験に使用したコード

Friend Sub ShowFolderInfo()
   Me.Show()
   Application.DoEvents()
   Dim s, t As String
   Dim i, p, imx As Integer
   Dim dv() As String = Directory.GetLogicalDrives()
   p = 0
   trvF.BeginUpdate()
      For i = 0 To dv.Length - 1
         Dim dp As New DriveParam("")    'T0305 参照
         GetDriveInfo(dv(i), dp)       'T0305 参照
         Dim dc As String = dp.Letter + ":\"
         trvF.Nodes.Add(dc)
         If dp.Ready Then
            AddNodes(dc, trvF.Nodes(p))
         End If
         p = p + 1
      Next
   trvF.EndUpdate()
   trvF.SelectedNode = Nothing
End Sub

'再帰呼び出し関数
Private Sub AddNodes(ByVal PA As String, ByVal ND As TreeNode)
   Dim i, p, Cnt As Integer
   Dim dr() As String = Directory.GetDirectories(PA)
   p = 0
   Cnt = dr.Length
   For i = 0 To Cnt - 1
      Dim di As New DirectoryInfo(dr(i))
      If (di.Attributes And 2) = 0 Then     '隠しフォルダは除外
         ND.Nodes.Add(di.Name)
         AddNodes(dr(i), ND.Nodes(p))      'PAの子を親として展開する
         p = p + 1
      End If
   Next
End Sub