{"id":2873,"date":"2009-04-23T14:53:00","date_gmt":"2009-04-23T14:53:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vbteam\/2009\/04\/23\/how-to-get-a-list-of-all-files-of-a-directory-subdirectories-included-daniel-walzenbach\/"},"modified":"2024-07-05T13:20:58","modified_gmt":"2024-07-05T20:20:58","slug":"how-to-get-a-list-of-all-files-of-a-directory-subdirectories-included-daniel-walzenbach","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/vbteam\/how-to-get-a-list-of-all-files-of-a-directory-subdirectories-included-daniel-walzenbach\/","title":{"rendered":"How to get a list of all files of a directory (subdirectories included) (Daniel Walzenbach)?"},"content":{"rendered":"<p>I needed to create a list of all <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/18yz4be4(VS.80).aspx\">Code Snippets<\/a> we ship in <a href=\"http:\/\/msdn.microsoft.com\/en-us\/vstudio\/default.aspx\">Visual Studio<\/a> the other day containing their title, description and path on disc and size. As you might know, Code Snippets are stored in multiple directories below &#8220;%ProgramFiles%Microsoft Visual Studio 10.0&#8221; so I had to traverse all the subdirectories of the aforementioned path to find all snippets. <\/p>\n<p>Fortunately &ndash; linq to the rescue &ndash; this came down to a few lines of code \ud83d\ude42<\/p>\n<table class=\"SourceCode\">\n<tbody>\n<tr>\n<td><span><\/p>\n<p><span>Dim<\/span><span><font color=\"#000000\"> query = <\/font><span>From<\/span><font color=\"#000000\"> file <\/font><span>In<\/span><font color=\"#000000\"> <\/font><span>My<\/span><font color=\"#000000\">.Computer.FileSystem.GetFiles(<\/font><span>&#8220;C:Program FilesMicrosoft Visual Studio 10.0&#8221;<\/span><font color=\"#000000\">, FileIO.SearchOption.SearchAllSubDirectories) _<\/font><\/span><\/p>\n<p><span><span><font color=\"#000000\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><span>Where<\/span><font color=\"#000000\"> file.EndsWith(<\/font><span>&#8220;.snippet&#8221;<\/span><font color=\"#000000\">) _<\/font><\/span><\/p>\n<p><span><span><font color=\"#000000\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/font><\/span><span>Order<\/span><font color=\"#000000\"> <\/font><span>By<\/span><font color=\"#000000\"> file<\/font><\/span><\/p>\n<p><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>This statement gives you a List of Strings (or, to be a bit more precise, a System.Linq.IOrderedEnumerable(Of String)) which you can walk over to do all kinds of crazy things. <\/p>\n<p>Here is what I did to solve the problem I described above:<\/p>\n<table class=\"SourceCode\">\n<tbody>\n<tr>\n<td>\n<p><span><span>Imports<\/span><span><font color=\"#000000\"> <\/font><span>&lt;<\/span><span>xmlns<\/span><span>=<\/span><span>&#8220;<\/span><span>http:\/\/schemas.microsoft.com\/VisualStudio\/2005\/CodeSnippet<\/span><span>&#8220;<\/span><span>&gt;<\/span><\/span>&nbsp;<\/span><\/p>\n<p><span><\/span>&nbsp;<\/p>\n<p><span>Public<\/span><span> <span>Class<\/span> Form1<\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Private<\/span> <span>Sub<\/span> Button1_Click(<span>ByVal<\/span> sender <span>As<\/span> System.Object, <span>ByVal<\/span> e <span>As<\/span> System.EventArgs) <span>Handles<\/span> Button1.Click<\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Dim<\/span> query = <span>From<\/span> file <span>In<\/span> <span>My<\/span>.Computer.FileSystem.GetFiles(txtPath.Text, FileIO.SearchOption.SearchAllSubDirectories) _<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Where<\/span> file.EndsWith(<span>&#8220;.snippet&#8221;<\/span>) _<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Order<\/span> <span>By<\/span> file<\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Dim<\/span> snippets <span>As<\/span> <span>New<\/span> List(<span>Of<\/span> Snippet)<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Dim<\/span> snippetDocument <span>As<\/span> XElement<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Dim<\/span> snippet <span>As<\/span> Snippet<\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>For<\/span> <span>Each<\/span> item <span>In<\/span> query<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>snippetDocument = XElement.Load(item)<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>If<\/span> snippetDocument&#8230;<span>&lt;<\/span>Title<span>&gt;<\/span>.Value <span>IsNot<\/span> <span>Nothing<\/span> <span>Then<\/span><\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>snippet = <span>New<\/span> Snippet <span>With<\/span> {.Title = snippetDocument&#8230;<span>&lt;<\/span>Title<span>&gt;<\/span>.Value.ToString _<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>, .Description = snippetDocument&#8230;<span>&lt;<\/span>Description<span>&gt;<\/span>.Value.ToString _<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>, .Path = item _<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>, .Size = <span>New<\/span> System.IO.FileInfo(item).Length}<\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>snippets.Add(snippet)<\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>If<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Next<\/span><\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>DataGridViewSnippets.AutoGenerateColumns = <span>True<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>DataGridViewSnippets.DataSource = snippets<\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>Sub<\/span><\/span><\/p>\n<p><span><\/span><\/p>\n<p><span>End<\/span><span> <span>Class<\/span><\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><\/span>&nbsp;<\/p>\n<p><span>Public<\/span><span> <span>Class<\/span> Snippet<\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Private<\/span> _Title <span>As<\/span> <span>String<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Private<\/span> _Description <span>As<\/span> <span>String<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Private<\/span> _Path <span>As<\/span> <span>String<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Private<\/span> _Size <span>As<\/span> <span>Long<\/span><\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Public<\/span> <span>Property<\/span> Title() <span>As<\/span> <span>String<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Get<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Return<\/span> _Title<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>Get<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Set<\/span>(<span>ByVal<\/span> value <span>As<\/span> <span>String<\/span>)<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>_Title = value<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>Set<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>Property<\/span><\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Public<\/span> <span>Property<\/span> Description() <span>As<\/span> <span>String<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Get<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Return<\/span> _Description<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>Get<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Set<\/span>(<span>ByVal<\/span> value <span>As<\/span> <span>String<\/span>)<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>_Description = value<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>Set<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>Property<\/span><\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Public<\/span> <span>Property<\/span> Path() <span>As<\/span> <span>String<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Get<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Return<\/span> _Path<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>Get<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Set<\/span>(<span>ByVal<\/span> value <span>As<\/span> <span>String<\/span>)<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>_Path = value<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>Set<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>Property<\/span><\/span><\/p>\n<p><span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>Public<\/span> <span>Property<\/span> Size() <span>As<\/span> <span>Long<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Get<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Return<\/span> _Size<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>Get<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>Set<\/span>(<span>ByVal<\/span> value <span>As<\/span> <span>Long<\/span>)<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>_Size = value<\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>Set<\/span><\/span><\/p>\n<p><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>End<\/span> <span>Property<\/span><\/span><\/p>\n<p><span><\/span><\/p>\n<p><span>End<\/span><span> <span>Class<\/span><\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Btw, if you bind the result to a DataGridView you can copy&amp;paste from there into excel. Needo \ud83d\ude42<\/p>\n<p>Cheers!<\/p>\n<p>&nbsp;&nbsp; Daniel<\/p>\n<p>Edited April 29, 2009: Included the &#8220;Imports&#8221; statement and did some cleanup work.<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I needed to create a list of all Code Snippets we ship in Visual Studio the other day containing their title, description and path on disc and size. As you might know, Code Snippets are stored in multiple directories below &#8220;%ProgramFiles%Microsoft Visual Studio 10.0&#8221; so I had to traverse all the subdirectories of the aforementioned [&hellip;]<\/p>\n","protected":false},"author":260,"featured_media":8818,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[192,195],"tags":[52,94],"class_list":["post-2873","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-featured","category-visual-basic","tag-daniel-walzenbach","tag-linqvb9"],"acf":[],"blog_post_summary":"<p>I needed to create a list of all Code Snippets we ship in Visual Studio the other day containing their title, description and path on disc and size. As you might know, Code Snippets are stored in multiple directories below &#8220;%ProgramFiles%Microsoft Visual Studio 10.0&#8221; so I had to traverse all the subdirectories of the aforementioned [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/2873","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/users\/260"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/comments?post=2873"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/2873\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media\/8818"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media?parent=2873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/categories?post=2873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/tags?post=2873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}