我有一些日志文件在一些目录是.txt文件,在他们的名字,他们有一些独特的名称代码,是在ddMMyyy,例如BlockPanel Logs_**23112022_00**.txt,粗体字是唯一的名称,这是一个日期,我说。我想做的是过滤这些文本文件是在两个日期内生成的,我选择了这些日期选择器。
.txt
ddMMyyy
BlockPanel Logs_**23112022_00**.txt
k3bvogb11#
所以你要做的是这样的。你可以为所有的txt文件添加一个过滤器,然后通过SubString方法从文件名中获取日期(你可以根据你的文件格式传递x和y)。然后添加这样的条件。
SubString
var myFiles = Directory .EnumerateFiles(dir, "*.txt", SearchOption.AllDirectories) .Where(s => Convert.ToDateTime(s.Substring(x,y)) > dt1 && Convert.ToDateTime(s.Substring(x,y)) < dt2);
np8igboo2#
下面是一个“详细”版本,显示了不使用LINQ的所有步骤:
private void button1_Click(object sender, EventArgs e) { DateTime dt; String dtFormat = "ddMMyyyy"; String folderPath = @"C:\Users\mikes\Documents\Test\"; DateTime dtStart = dateTimePicker1.Value.Date; DateTime dtStop = dateTimePicker2.Value.Date; if (dtStart <= dtStop) { DirectoryInfo di = new DirectoryInfo(folderPath); foreach(FileInfo fi in di.GetFiles("*.txt")) { String[] parts = Path.GetFileNameWithoutExtension(fi.Name).Split("_".ToCharArray()); if (parts.Length>=2) { if (DateTime.TryParseExact(parts[1], dtFormat, null, System.Globalization.DateTimeStyles.None, out dt)) { if (dt >= dtStart && dt <= dtStop) { // ... do something with "fi" ... Console.WriteLine(fi.FullName); } } } } } }
它假定文件名中至少有一个下划线_,并且日期部分在第一个_之后,第二个_之前(如果存在)。
_
2条答案
按热度按时间k3bvogb11#
所以你要做的是这样的。你可以为所有的txt文件添加一个过滤器,然后通过
SubString
方法从文件名中获取日期(你可以根据你的文件格式传递x和y)。然后添加这样的条件。np8igboo2#
下面是一个“详细”版本,显示了不使用LINQ的所有步骤:
它假定文件名中至少有一个下划线
_
,并且日期部分在第一个_
之后,第二个_
之前(如果存在)。