/ / FileWatcher निर्माण घटना नहीं निकाल दी - सी #

FileWatcher निर्माण घटना नहीं निकाल दी - सी #

मैंने निगरानी के लिए एक फाइलवॉचर सेवा लिखीनिर्देशिका दोबारा, और यदि निर्देशिका में .txt फ़ाइल सामग्री परिवर्तन या नई बनाई गई .txt फ़ाइलें हैं, तो यह फ़ाइल को केंद्रीय फ़ोल्डर में कॉपी करेगी। लेकिन मैं अपने कार्यक्रम में कुछ समस्या को पूरा करता हूं।

जब भी कोई है।txt फ़ाइल सामग्री बदलती है, मेरा प्रोग्राम अच्छी तरह से काम करता है। हालांकि, जब निर्देशिका में बनाई गई एक नई .txt फ़ाइल है, तो बनाई गई घटना कभी नहीं निकाल दी जाती है। नीचे मेरा कोड है, क्या आप कृपया इस समस्या से मेरी मदद कर सकते हैं? अग्रिम में धन्यवाद!

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

}
}
}

उत्तर:

उत्तर № 1 के लिए 1

मुझे लगता है, आपके NotifyFilter में एक समस्या है। बनाई गई घटना प्राप्त करने के लिए आपको NotifyFilters.FileName जोड़ना होगा। मैं इसे एक छोटे से समाधान में reporduce सकता है।