|
■No88608 (なつ さん) に返信 > 既に頭の中は混乱状態、思ってたよりは随分とややっこしいのですね。
No88585 の時点で、DirectoryInfo にどういうメンバーが含まれているかは調査済みで、 それでも調査しきれなかったという点についても、追加質問に対して、短いコード例を つけて回答したので、それで分かってもらえるものと思い込んでいました。反省。
DirectoryInfo にどんなメンバーがあるかは、DataGridView に渡すことで一覧できます。 DirectoryInfo のプロパティに、日付情報も同時に記録されていることが一望できるかと。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim sDir As String = "C:\Users\○○○\○○○\SONY NNC\SNNC30" DataGridView1.DataSource = New DirectoryInfo(sDir).GetDirectories("*", SearchOption.AllDirectories) End Sub
上記では、コントロールに表示するために GetDirectories を使いましたが、 No88598 でも述べたように、 EnumerateDirectories を使って LINQ や For Each での 順次列挙を行うこともできます。
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim sDir As String = "C:\Users\○○○\○○○\SONY NNC\SNNC30" For Each di In New DirectoryInfo("C:\TEST").EnumerateDirectories("*", SearchOption.AllDirectories) Debug.WriteLine($"作成={di.CreationTime}, 更新={di.LastWriteTime}, パス={di.FullName}") Next End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim sDir As String = "C:\Users\○○○\○○○\SONY NNC\SNNC30" For Each di In New DirectoryInfo("C:\TEST").GetDirectories("*", SearchOption.AllDirectories) Debug.WriteLine($"作成={di.CreationTime}, 更新={di.LastWriteTime}, パス={di.FullName}") Next End Sub
Button2 は EnumerateDirectories による列挙、 Button3 は GetDirectories による列挙にしてあります。
いずれも Debug.WriteLine により、「イミディエイト」ウィンドウもしくは「出力」ウィンドウに 作成日時、更新日時、ディレクトリ名を列挙するだけの処理です。
sDir に、フォルダ数が多いパスを与えてみてください。 EnumerateDirectories ではすぐに列挙が始まるのに、 GetDirectories では列挙開始まで時間がかかってしまいます。
また、sDir に "C:\Windows" などを与えると、アクセス権の問題から 例外で停止してしまうことになります。これが No88598 で述べていた注意点です。 >> UnauthorizedAccessException 例外等により、処理が中断されてしまうことになります。
> Dim x As IEnumerable(Of String) = System.IO.Directory.EnumerateDirectories("C:\Users\○○○\○○○\SONY NNC\SNNC30", "*", System.IO.SearchOption.AllDirectories) > ただ疑問なのは、x は 同じString でありながらも、 同じ…では無いですよね? x の型は「String」でも「String()」でもなく、「IEnumerable(Of String)」なのですから。
> 何故か ListBox1.Items.AddRange(x) とは出来ないのかです。 AddRange メソッドの引数に渡せる型は「Object()」だからですね。 (Hongliang さんの回答にあるとおり、もう一つのオーバーロードもありますが)
でもって、IEnumerable(Of String) は一次元配列ではありませんから、 Object() に変換することができません。ゆえに、AddRange には渡せないということです。
配列化するために『ListBox1.Items.AddRange(x.ToArray())』のように呼べば渡せますが、 それなら最初から、EnumerateDirectories ではなく GetDirectories を使えば済みますね。
ただし LINQ で再加工するような処理においては、EnumerateDirectories の方が良いでしょう。
Dim q = From di In New DirectoryInfo(sDir).EnumerateDirectories("*", SearchOption.AllDirectories) Select $"作成={di.CreationTime}, 更新={di.LastWriteTime}, パス={di.FullName}"
ListBox1.Items.AddRange(q.ToArray())
> NET Framework は4.0のようです。 NET ではなく .NET (ドットネット) ですね。
Jitta さんの回答に補足して、.NET Framework のライフサイクルの表を載せておきます。 (.NET Framework 4 / 4.5 / 4.5.1 のサポートは、2016 年 1 月 12 日で終了しています)
4.7.2 → 2018/02/05 ライフサイクル開始、サポート中(OS のサポート期限まで)★現在の最新版★ 4.7.1 → 2017/10/17 ライフサイクル開始、サポート中(OS のサポート期限まで) 4.7 → 2017/04/05 ライフサイクル開始、サポート中(OS のサポート期限まで) 4.6.2 → 2016/08/02 ライフサイクル開始、サポート中(OS のサポート期限まで) 4.6.1 → 2015/11/30 ライフサイクル開始、サポート中(OS のサポート期限まで) 4.6 → 2015/07/20 ライフサイクル開始、サポート中(OS のサポート期限まで) 4.5.2 → 2014/05/05 ライフサイクル開始、サポート中(OS のサポート期限まで) 4.5.1 → 2013/09/07 ライフサイクル開始、2016/01/12 で既にサポート切れ 4.5 → 2012/08/05 ライフサイクル開始、2016/01/12 で既にサポート切れ 4.0 → 2010/03/31 ライフサイクル開始、2012/03/04 Update 3(4.0.3)、2016/01/12 で既にサポート切れ 3.5 → 2007/11/19 ライフサイクル開始、2008/11/18 Service Pack 1(3.5.1)、サポート中(OS のサポート期限まで) 3.0 → 2006/11/19 ライフサイクル開始、2008/08/12 Service Pack 2、2011/07/12 で既にサポート切れ 2.0 → 2005/11/07 ライフサイクル開始、2009/01/16 Service Pack 2、2011/07/12 で既にサポート切れ 1.1 → 2003/04/01 ライフサイクル開始、2004/09/09 Service Pack 1、2013/10/08 で既にサポート切れ 1.0 → 2002/01/05 ライフサイクル開始、2004/09/09 Service Pack 3、2009/07/14 で既にサポート切れ
※ライフサイクルの開始日は、リリース日とは異なります。
4.7.2 を同梱している OS → Windows 10 ver1803 4.7.1 を同梱している OS → Windows 10 ver1709 4.7 を同梱している OS → Windows 10 ver1703 4.6.2 を同梱している OS → Windows 10 ver1607 4.6.1 を同梱している OS → Windows 10 ver1511 4.6 を同梱している OS → Windows 10 ver1507 4.5.2 を同梱している OS → なし 4.5.1 を同梱している OS → Windows 8.1 4.5 を同梱している OS → Windows 8 4.0 を同梱している OS → なし 3.5.x を同梱している OS → Vista 〜 Windows 10 3.0 を同梱している OS → Vista 〜 Windows 10 2.0 を同梱している OS → Vista 〜 Windows 10 1.1 を同梱している OS → なし 1.0 を同梱している OS → なし
|