【问题标题】:Look for file in folder, get & compare latest date created in c#在文件夹中查找文件,获取并比较在 c# 中创建的最新日期
【发布时间】:2016-11-09 00:34:02
【问题描述】:

我需要监控一个文件夹,查看一个或多个文件是否已上传。然后我需要获取已上传的最新文件的创建日期和时间,并查看文件的创建时间是否距离当前时间超过 30 分钟。我已经使用 FileSystemWatcher 来监视文件夹,但是我应该如何继续查找最新文件并将其与当前时间进行比较。

private void watch()
{
  FileSystemWatcher watcher = new FileSystemWatcher();
  watcher.Path = path;
  watcher.NotifyFilter = NotifyFilters.LastWrite;
  NotifyFilters.DirectoryName;
  watcher.Filter = "*.*";
  watcher.Changed += new FileSystemEventHandler(OnChanged);
  watcher.EnableRaisingEvents = true;
}

Private void OnChanged(object source, FileSystemEventArgs e)
{
  //Copies file to another directory.
}

我应该如何在 c# 中做到这一点。请帮忙!

【问题讨论】:

  • FileSystemEventArgs msdn.microsoft.com/en-us/library/… 上寻求帮助
  • 但是OnChanged 会在文件创建(上传)后触发 => 创建时间将为Now。您的意思是要检查上传过程是否超过 30 分钟?或者你到底在追求什么?
  • @user3185569 实际上,我计划将代码作为计划任务运行,每 1 小时运行一次。所以我期待它然后查看文件夹中创建的最新文件是否已创建超过 30 分钟。
  • 这个答案的问题没有帮助吗? stackoverflow.com/a/15018082/868127
  • @claudekennilol 是的,但只是部分。我如何检查文件夹中创建的最新文件并比较创建的时间是从现在开始超过 30 分钟。

标签: c# directory filesystemwatcher datecreated


【解决方案1】:

从您的 cmets 中,我真的不明白您为什么需要使用 FileSystemWatcher。您说您每 1 小时有一个计划任务,需要检查目录以了解文件的创建时间。因此,在该任务中,只需执行以下操作:

// Change @"C:\" to your upload directory
string[] files = Directory.GetFiles(@"C:\");

var oldestFile = files.OrderBy(path => File.GetCreationTime(path)).FirstOrDefault();
if (oldestFile != null)
{
    var oldestDate = File.GetCreationTime(oldestFile);

    if (DateTime.Now.Subtract(oldestDate).TotalMinutes > 30)
    {
        // Do Something
    }
}

要过滤特定文件,请使用重载:

string[] files = Directory.GetFiles(@"C:\", "*.pdf");

【讨论】:

  • 如果需要过滤特定类型的文件怎么办,比如说pdf?
  • 现在,如果我需要访问在我的计算机上本地找不到但在远程计算机上的目录。假设@"\\testweb\checkfiles\");但是我的计算机没有访问该远程目录的权限,我需要指定授权帐户用户的凭据才能执行此操作。我该怎么办?
  • @velvt 如果可以从您正在执行代码的服务器访问它,那就去吧。如果网络位置需要任何进一步的影响,那么我认为这是一个不同的问题 - “如何使用 c# 访问网络位置中的文件”,它与这个问题“如何检查在 30 之前创建的文件”没有直接关系分钟?”。
  • 我只需要获取目录中最旧的文件(按创建日期排序)并比较这个创建日期,如果它距离现在超过 30 分钟。
  • 当它们在文件夹中没有文件时,它会崩溃,并在 mscorlib.dll 中发生以下异常 'System.ArgumentNullException' 附加信息:值不能为空。
【解决方案2】:

在 OnChanged 事件中:

    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        var currentTime = DateTime.Now;
        var file = new FileInfo(e.FullPath);
        var createdDateTime = file.CreationTime;
        var span = createdDateTime.Subtract(currentTime);

        if (span.Minutes > 30)
        {
            // your code
        }
    }

要过滤特定的文件扩展名(例如 pdf),您可以使用:

if (file.Extension == ".pdf")
{

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 2018-08-18
    • 1970-01-01
    • 2015-12-05
    相关资源
    最近更新 更多