.net 在C#中使用两个日期时间选取器从文件夹中筛选(.txt)文件

5m1hhzi4  于 2022-11-26  发布在  .NET
关注(0)|答案(2)|浏览(266)

我有一些日志文件在一些目录是.txt文件,在他们的名字,他们有一些独特的名称代码,是在ddMMyyy,例如BlockPanel Logs_**23112022_00**.txt,粗体字是唯一的名称,这是一个日期,我说。我想做的是过滤这些文本文件是在两个日期内生成的,我选择了这些日期选择器。

k3bvogb1

k3bvogb11#

所以你要做的是这样的。你可以为所有的txt文件添加一个过滤器,然后通过SubString方法从文件名中获取日期(你可以根据你的文件格式传递x和y)。然后添加这样的条件。

var myFiles = Directory
    .EnumerateFiles(dir, "*.txt", SearchOption.AllDirectories)
    .Where(s =>  Convert.ToDateTime(s.Substring(x,y)) > dt1 && Convert.ToDateTime(s.Substring(x,y)) < dt2);
np8igboo

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

它假定文件名中至少有一个下划线_,并且日期部分在第一个_之后,第二个_之前(如果存在)。

相关问题