获取一个文件夹中的文件,另一个文件夹中的文件?

时间:2018-07-06 09:10:13

标签: vb.net visual-studio vb.net-2010

我正在尝试为自己创建一个迷你工具,该工具检查目录“ 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

2 个答案:

答案 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);
            }
        }
    }
}