【问题标题】:C# Refresh File to get the correct lastwritetime for file which is being written by another applicationC# Refresh File 以获取另一个应用程序正在写入的文件的正确 lastwritetime
【发布时间】:2021-05-04 00:08:17
【问题描述】:

首先感谢您的帮助。

我正在编写一个 C# 应用程序,用于根据修改日期复制一些文件。 该程序大部分时间都在工作,除了处理由另一个应用程序编写的文件时。对于这些文件,我意识到文件的最后修改日期在我手动刷新之前不会更新。

我有以下代码可以解决,所有文件都首先刷新,确保修改日期在我存储到列表之前更新

DirectoryInfo directory = new DirectoryInfo(@"C:\Testing");

var listofallfile = directory.GetFiles();
var listOfFilesInSpecifiedPeriod = new List<FileInfo>();
            
foreach (var file in listofallfile)
{
    file.Refresh();
    if (file.LastWriteTime>= fromDate && file.LastWriteTime <= toDate)
     {
       listOfFilesInSpecifiedPeriod.Add(file);
     }
}

但我想用更简单的线条表达这一点。有没有办法在下面的代码中重新设置文件修改日期?

DirectoryInfo directory = new DirectoryInfo(@"C:\Testing");

var listOfFilesInSpecifiedPeriod = directory.GetFiles()
                            .Where(file => file.LastWriteTime >= fromDate && file.LastWriteTime <= toDate);

谢谢

【问题讨论】:

  • 不是您问题的答案,但您应该使用EnumerateFiles 而不是GetFiles
  • 感谢您的建议。是的,我现在明白 EnumerateFiles 在处理大量文件时效率更高。谢谢

标签: c# refresh


【解决方案1】:

您可以使用列表的forEach 函数。它不在IEnumerable 上,但它可以解决问题:

var listOfFilesInSpecifiedPeriod = directory.GetFiles().ToList();
listOfFilesInSpecifiedPeriod.forEach(file => file.Refresh());
listOfFilesInSpecifiedPeriod = listOfFilesInSpecifiedPeriod.Where(file => file.LastWriteTime >= fromDate && file.LastWriteTime <= toDate).ToList();
 

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多