Ste*_*ner 241
像这样的东西做的事情.
using System.IO;
string[] files = Directory.GetFiles(dirName);
foreach (string file in files)
{
FileInfo fi = new FileInfo(file);
if (fi.LastAccessTime < DateTime.Now.AddMonths(-3))
fi.Delete();
}
Run Code Online (Sandbox Code Playgroud)
Uri*_*son 81
这是一个单线lambda:
Directory.GetFiles(dirName)
.Select(f => new FileInfo(f))
.Where(f => f.LastAccessTime < DateTime.Now.AddMonths(-3))
.ToList()
.ForEach(f => f.Delete());
Run Code Online (Sandbox Code Playgroud)
Sam*_*eff 27
对于那些喜欢过度使用LINQ的人.
(from f in new DirectoryInfo("C:/Temp").GetFiles()
where f.CreationTime < DateTime.Now.Subtract(TimeSpan.FromDays(90))
select f
).ToList()
.ForEach(f => f.Delete());
Run Code Online (Sandbox Code Playgroud)
Pie*_*gny 13
以下是如何获取目录中文件的创建时间以及查找已在3个月前创建的文件(确切地说是90天前)的片段:
DirectoryInfo source = new DirectoryInfo(sourceDirectoryPath);
// Get info of each file into the directory
foreach (FileInfo fi in source.GetFiles())
{
var creationTime = fi.CreationTime;
if(creationTime < (DateTime.Now- new TimeSpan(90, 0, 0, 0)))
{
fi.Delete();
}
}
Run Code Online (Sandbox Code Playgroud)
当想要在特定持续时间内删除文件时,最规范的方法是使用文件的 LastWriteTime(上次修改文件的时间):
Directory.GetFiles(dirName)
.Select(f => new FileInfo(f))
.Where(f => f.LastWriteTime < DateTime.Now.AddMonths(-3))
.ToList()
.ForEach(f => f.Delete());
Run Code Online (Sandbox Code Playgroud)
(以上内容基于 Uri 的回答,但带有LastWriteTime。)
每当您听到人们谈论删除早于特定时间范围的文件(这是一种非常常见的活动)时,他们几乎总是在寻找基于文件的 LastModifiedTime 的操作。
或者,对于非常不寻常的情况,您可以使用以下内容,但请谨慎使用,因为它们带有警告。
CreationTime
.Where(f => f.CreationTime < DateTime.Now.AddMonths(-3))
Run Code Online (Sandbox Code Playgroud)
在当前位置创建文件的时间。但是,请注意,如果文件被复制,它将是复制的时间,并且CreationTime会比文件的LastWriteTime.
LastAccessTime
.Where(f => f.LastAccessTime < DateTime.Now.AddMonths(-3))
Run Code Online (Sandbox Code Playgroud)
如果您想根据上次读取的时间删除文件,您可以使用它,但是不能保证它会被更新,因为它可以在 NTFS 中禁用。检查fsutil behavior query DisableLastAccess它是否已打开。此外,在 NTFS 下,文件的 LastAccessTime 在访问后可能需要长达一个小时才能更新。
| 归档时间: |
|
| 查看次数: |
121512 次 |
| 最近记录: |