上へ ビットマップの処理速度 色変換速度 数式演算速度 冪乗演算速度 検索速度 文字列処理速度 文字列/数値処理速度 CPU演算速度 TicksとPerformance Counter 文字の数値化 数値化文字の再現 数値化文字の補間 補間の効果 ネイピア数 ネイピア数2 指数関数近似値 級数の収束速度1 級数の収束速度2 級数の精度 逆三角関数を求める 算術幾何平均でπを求める 全フォルダ列挙 ビットマップとメモリリソース 配列とメモリリソース
| |
ソフトウェア実験室 |
全フォルダ列挙 |
最終更新:2005/12/23
新規 |
システムの存在する全てのフォルダを列挙して見る。これは、全ファイルの列挙と同じ手法で良い。
●原理/方法
- 列挙した結果はツリー表示する。表示はフォルダ名のみ。
- 処理としては、親フォルダが与えられると、その全ての子フォルダ(孫以下には行かない)を列挙する関数を再帰呼び出しすれば良い。
- この場合、ツリーの全容が予め分かっていないので、T0107 ツリービューを作成する
のような方法は採用できなく、ダイナミックなオブジェクトの利用を行う。
●手順
- 始まりはドライブとする。全ドライブ情報を獲得
- Readyなドライブについて、展開する。
- 再帰呼び出しなので、ドライブ単位で呼び出せば終了。
●結果
●考察
得られることは分かったが、一気に展開する方法は、マシンやドライブによっては時間が掛かりすぎる。ユーザに任意のフォルダを選ばせるような用途には使えない方法と言える。
●実験に使用したコード
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
|