1

フォルダーを監視し、ファイルがアップロードされているかどうかを確認する必要があります。次に、アップロードされた最新のファイルの作成日時を取得し、ファイルの作成時間が現在の時刻から 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# でそれを行うにはどうすればよいでしょうか。助けてください!

4

2 に答える 2

1

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")
{

}
于 2016-07-06T20:28:57.110 に答える
1

あなたのコメントから、なぜあなたが を使う必要があるのか​​ 本当にわかりません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");
于 2016-07-06T20:17:11.667 に答える