在一个文件夹中获取文件,在另一个文件夹中?
Get files within a folder, within another folder?
我正在尝试为自己创建一个迷你工具来检查目录“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\ ****
中的 FILES
因为我有一个来自 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
你走在正确的轨道上你建议的内部循环是正确的你还需要的一件事是FileInfo
class它可以获取关于文件的元数据并且你做的和你做的一样文件夹。
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);
}
}
}
}
我正在尝试为自己创建一个迷你工具来检查目录“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\ ****
中的 FILES因为我有一个来自 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
你走在正确的轨道上你建议的内部循环是正确的你还需要的一件事是FileInfo
class它可以获取关于文件的元数据并且你做的和你做的一样文件夹。
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);
}
}
}
}