/ / FileWatcher-Erstellungsereignis nicht ausgelöst - c #

FileWatcher-Erstellungsereignis nicht ausgelöst - c #

Ich habe einen Filewatcher Service für die Überwachung einesrekursiv, und wenn der Inhalt der TXT-Datei geändert wird oder neue TXT-Dateien im Verzeichnis erstellt werden, wird die Datei in einen zentralen Ordner kopiert. Aber ich treffe ein Problem in meinem Programm.

Immer wenn es einen gibt.txt Dateiinhalte ändern sich, mein Programm funktioniert gut. Wenn eine neue TXT-Datei in dem Verzeichnis erstellt wird, wurde das erstellte Ereignis jedoch nie ausgelöst. Unten ist mein Code, könntest du mir bitte bei diesem Problem helfen? Danke im Voraus!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileWatcher
{
public partial class FileWatcher : ServiceBase
{
private string des = @"c:b";
private FileSystemWatcher watcher;
public FileWatcher()
{
InitializeComponent();
watcher = new FileSystemWatcher();
}

protected override void OnStart(string[] args)
{


watcher.Path = @"C:a";
/* Watch for changes in LastAccess and LastWrite times, and
the renaming of files or directories. */
watcher.NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite;

// Only watch text files.
watcher.Filter = "*.txt";

// Add event handlers.
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnCreated);


// Begin watching.
watcher.IncludeSubdirectories = true;
watcher.EnableRaisingEvents = true;
}
private void OnChanged(object sender, FileSystemEventArgs e) {

string fileName = Path.GetFileName(e.Name);
string destFile = System.IO.Path.Combine(des, fileName);
using (System.IO.StreamWriter f = new System.IO.StreamWriter(@"C:log.txt", true))
{
f.WriteLine(fileName);
}


using (System.IO.StreamWriter f = new System.IO.StreamWriter(@"C:log.txt", true))
{
f.WriteLine(destFile);
}

System.IO.File.Copy(e.FullPath, destFile, true);

}

private void OnCreated(object sender, FileSystemEventArgs e) {
using (System.IO.StreamWriter f = new System.IO.StreamWriter(@"C:log.txt", true))
{
f.WriteLine("create new");
}

FileAttributes attr = File.GetAttributes(e.FullPath);
//detect whether its a directory or file
if ((attr & FileAttributes.Directory) == FileAttributes.Directory) {
foreach (string file in Directory.GetFiles(e.FullPath))
{
var eventArgs = new FileSystemEventArgs(
WatcherChangeTypes.Created,
Path.GetDirectoryName(file),
Path.GetFileName(file));
OnCreated(sender, eventArgs);
}


}
else {
string fileName = e.Name;
string destFile = System.IO.Path.Combine(des, fileName);
System.IO.File.Copy(e.FullPath, destFile, true);
}


}


protected override void OnStop()
{

}
}
}

Antworten:

1 für die Antwort № 1

Ich denke, es gibt ein Problem in Ihrem NotifyFilter. Sie müssen NotifyFilters.FileName hinzufügen, um das erstellte Ereignis abzurufen. Ich könnte es in einer kleinen Lösung ersetzen.