Vb.net 删除子文件夹中的文件并删除空文件夹

Vb.net 删除子文件夹中的文件并删除空文件夹,vb.net,plugins,Vb.net,Plugins,我必须写一个插件(在VB.NET中),在设定的天数后删除文件。我一直在使用此代码“删除”所有早于数据时代的文件: 出于测试目的,我使用Log(file.Name)而不是file.Delete() 如何从.PluginXML.DeleteDirectory检查子文件夹中的旧文件/空文件夹? 我尝试了类似的方法,但它会删除文件夹,而不是旧文件 For Each folder As IO.DirectoryInfo In directory.GetDirectories() I

我必须写一个插件(在VB.NET中),在设定的天数后删除文件。我一直在使用此代码“删除”所有早于数据时代的文件:

出于测试目的,我使用
Log(file.Name)
而不是
file.Delete()

如何从
.PluginXML.DeleteDirectory
检查子文件夹中的旧文件/空文件夹? 我尝试了类似的方法,但它会删除文件夹,而不是旧文件

    For Each folder As IO.DirectoryInfo In directory.GetDirectories()
        If (Now - folder.CreationTime).Days > .PluginXML.DataAge Then Log(folder.FullName)
    Next
一个选项是使用(或者更好的*,)接受一个,您可以使用它指定它递归所有目录。例如:

For Each file As FileInfo In directory.EnumerateFiles("*.*", SearchOption.AllDirectories)
    If (Now - file.CreationTime).Days > .PluginXML.DataAge Then Log(file.Name)
Next
另一种方法是创建一个递归函数,使用以下命令遍历目录树:

然后使用基本/根路径调用该方法

Dim rootDir As New DirectoryInfo(.PluginXML.DeleteDirectory)
ProcessDirectory(rootDir, .PluginXML.DataAge)
但是请注意,当目录不可访问时,您可能需要添加错误处理,例如当抛出
UnauthorizedAccessException
SecurityException


*
GetFiles
一次将所有文件加载到内存中,而
EnumerateFiles
返回一个
IEnumerable
,以流式传输结果。如果要处理包含大量文件的目录,尤其是使用
AllDirectories
选项,这会带来好处

这叫做递归。网络上已经有无数递归文件搜索的例子。
Public Sub ProcessDirectory(directory as DirectoryInfo, dataAge as Integer) 
    For Each file As FileInfo In directory.EnumerateFiles()
        If (Now - file.CreationTime).Days > dataAge Then Log(file.Name)
    Next
    For Each subDir as DirectoryInfo In directory.EnumerateDirectories()
       ProcessDirectory(subDir, dataAge) 
    Next
End Sub
Dim rootDir As New DirectoryInfo(.PluginXML.DeleteDirectory)
ProcessDirectory(rootDir, .PluginXML.DataAge)