我正在尝试为自己创建一个迷你工具,该工具检查目录“ C:\ Logs ”
在 C:\ Logs 内,我有许多文件夹具有随机名称。我希望能够在 C:\ Logs 内的所有文件夹内以及这些文件夹内进行检查,检查创建日期是否旧,以便可以通过编程方式将其删除。
这是我到目前为止所拥有的...
Try
Dim CreatedDate As DateTime
Dim Todays_Date As DateTime = Today.Date
Dim DirInfo As DirectoryInfo
Dim Time_Span As TimeSpan
Dim DirList As New List(Of String)
For Each SubDir As String In Directory.GetDirectories("C:\Logs")
DirInfo = New DirectoryInfo(SubDir)
CreatedDate = DirInfo.CreationTimeUtc
Time_Span = Todays_Date - CreatedDate
If Time_Span .Days > 10 Then
DirList .Add(SubDir)
DirInfo.Delete(True)
Else
'No Dir found or Dir is not > 10
End If
Next
End Try
这当前从C:\ Logs中获取所有文件夹,并删除10天之前的所有文件夹。但是,我只想删除C:\ Logs \ ****
中的文件因为我有一个来自C:\的文件夹列表,通过:
For Each SubDir As String In Directory.GetDirectories("C:\Logs")
我是否必须执行这样的操作才能获取这些文件夹中的所有文件?
For Each SubFile As String In Directory.GetFiles(SubDir)
'Check date of each file and delete if older than 10 days?
Next
答案 0 :(得分:1)
您在正确的轨道上,建议的内循环是正确的,您还需要FileInfo
类,该类可以获取有关文件的元数据,并且与对文件夹的处理相同。
答案 1 :(得分:1)
Sub TestIO()
Dim fld As New DirectoryInfo("C:\Logs")
fld.EnumerateFiles().
Where(Function(f) (Date.Now - f.CreationTimeUtc) > TimeSpan.FromDays(10)).
ToList().
ForEach(Sub(f) f.Delete())
End Sub
更新
要摆脱使用方便的ToList
方法的ForEach
调用,您可以添加直接与IEnumerable一起使用的扩展方法(在.NET Framework中是受欢迎的)。此扩展方法如下所示:
public static class ExtensionMethods
{
public static void ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
{
if (enumerable == null)
{
throw new ArgumentException($"Argument {nameof(enumerable)} is null.");
}
using (var enumerator = enumerable.GetEnumerator())
{
while (enumerator.MoveNext())
{
action(enumerator.Current);
}
}
}
}