【问题标题】:Find specific file by last modified date and text inside the file按最后修改日期和文件内的文本查找特定文件
【发布时间】:2014-03-21 09:11:16
【问题描述】:

我必须在文件的第 3 行找到具有最后修改日期并包含特定文本模式的文件。

var directory = new DirectoryInfo("D:\\test");
var dispenser = directory.GetFiles("Dispenser*")
                         .OrderByDescending(f => f.LastWriteTime)
                         .First();
dispenser.CopyTo("..\\..\\Dispenser", true);
dispenserCopy = true;

这将返回第一个文件名以“Dispenser”开头和最后修改日期的文件。如何检查第 3 行是否有特定文本?如果没有 - 检查下一个“Dispenser*”文件(按修改日期降序排列)等等,直到第 3 行有一个带有文本的文件?

谢谢!

【问题讨论】:

标签: c# file search directory


【解决方案1】:

编辑:编辑以尝试匹配我认为您想要实现的目标。话虽如此 - 我会诚实地退后一步,重新考虑对 XML 数据使用固定行号的字符串操作的方法。

var dispenser =
   directory.GetFiles("Dispenser*")
            .OrderByDescending(f => f.LastWriteTime)
            .Where(f => (File.ReadLines(f.FullName)
                             .Skip(2)
                             .FirstOrDefault()
                               ?? String.Empty).Contains("MY_EXPECTED_LINE"))
            .FirstOrDefault();

【讨论】:

  • 不——如果最后修改的 Dispenser* 文件没有第 3 行或第 3 行中的“My_expexted_line”,它什么也不做。
  • 我认为如果文件中的行少于 3 行,这会爆炸——也许需要一些检查?也许改用.FirstOrDefault()(可能在当前使用First()的两个地方)
  • @MatthewWatson 在向 SO 编写代码时,我倾向于尽可能少地修改 OP 的代码以避免混淆问题;你是对的,在这种情况下它更有可能有一个空序列 - 更正
  • @DmitryDovgopoly 绝对不真实 - 运行以下命令来验证:Enumerable.Range(1, 10).Where(i => { Console.WriteLine(i); return i >= 3; }).FirstOrDefault(); LINQ 的延迟执行在这里是你的朋友
  • @decPL 哦,我发现我的错误 - 我在搜索条件中输入了错误的内容!对不起!并感谢您的解决方案!!! :)
猜你喜欢
  • 2021-12-08
  • 1970-01-01
  • 2016-04-01
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
相关资源
最近更新 更多