代码之家  ›  专栏  ›  技术社区  ›  The Newbie

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

  •  0
  • The Newbie  · 技术社区  · 6 年前

    我正在尝试为自己创建一个小工具,检查 C:\日志 “。”

    C:\日志 我有很多随机名字的文件夹。我想查一下里面所有的文件夹 C:\日志 在这些文件夹中,检查创建的日期是否旧,以便我可以通过编程方式删除它们。

    这是我到目前为止所拥有的…

    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:\日志中获取所有文件夹并删除任何 文件夹 超过10天。但是,我只想删除 文件夹 在C:\日志\****

    因为我有一个来自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 回复  |  直到 6 年前
        1
  •  1
  •   Rafal    6 年前

    你在正确的轨道上你建议的内环是正确的还有一件事你需要 FileInfo 类,该类可以获取有关文件的元数据,并且您可以像对文件夹那样执行此操作。

        2
  •  1
  •   JohnyL    6 年前
    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框架中是受欢迎的)。此扩展方法如下所示:

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