2012-08-17 23 views
8

में विंडोज सर्विस डब्ल्यू/फाइलसिस्टम वाचरर मुझे एक प्रोग्राम बनाना है जो फ़ाइल आकार में बदलावों पर नज़र रखता है। मैंने पहले से ही एक साधारण विंडोज सेवा और फाइल सिस्टमविचर बनाया है, इसलिए अब मैं परिचित w/अवधारणा हूं। मैंने एक कोड भी बनाया जो फाइलसाइज की जांच करता है (इसे फॉर्म बटन में बनाया गया है) लेकिन अभी तक मेरे फाइल सिस्टम सिस्टम में लागू नहीं हुआ है। मैं एक विंडोज सेवा कैसे बना सकता हूं जिसमें फ़ाइलवाटर है जो फ़ाइल आकार पर नज़र रखता है? क्या मुझे विंडोज़ सेवा के अंदर एक फाइल सिस्टम सिस्टम रखना है और वॉकर को ऑनस्टार्ट विधि के माध्यम से कॉल करना है?सी #

उत्तर

14

यदि आप विंडो की सेवा कर रहे हैं, तो आप इसे प्रोग्रामेटिक रूप से करना चाहेंगे। मैं आमतौर पर अपनी सेवाओं से फॉर्म बना रहता हूं और संवाद करने के लिए उनके लिए एक अलग इंटरफ़ेस बना देता हूं। अब FileSystemWatcher के पास पूरी तरह से आकार के लिए देखने की कोई घटना नहीं है, इसलिए आप एक विधि बनाना चाहेंगे जो FileSystemWatcher से जुड़ती है। मौजूदा फ़ाइलों में संशोधन की जांच करने के लिए बदलें। अपने ऑनस्टार्ट विधि में नियंत्रण घोषित करें और प्रारंभ करें और घटनाओं को एक साथ जोड़ दें। अपनी ऑनस्टॉप विधि में कोई क्लीनअप कोड करें। यह कुछ इस तरह दिखना चाहिए:

protected override void OnStart(string[] args) 
{ 
FileSystemWatcher Watcher = new FileSystemWatcher("PATH HERE"); 
Watcher.EnableRaisingEvents = true; 
Watcher.Changed += new FileSystemEventHandler(Watcher_Changed); 
} 

// This event is raised when a file is changed 
private void Watcher_Changed(object sender, FileSystemEventArgs e) 
{ 
// your code here 
} 

यह भी ध्यान रखें, FileSystemWatcher एक एकल फाइल के लिए कई घटनाओं बंद को सक्रिय कर देगा, पैटर्न उसके चारों ओर काम करने के लिए इसलिए जब आप घड़ी डिबगिंग रहे हैं।

+0

तो मुझे सेवा विंडो में टूलबॉक्स से कोई आइटम नहीं जोड़ना चाहिए .. धन्यवाद! मैं इसे एप की कोशिश करूंगा .. यह वास्तव में उपयोगी था –

+0

मैं इससे दूर रहूंगा। जब आप कोई सेवा चला रहे हैं, तो विंडोज स्वाभाविक रूप से फॉर्म एकीकरण को अक्षम करता है और इसे अनुमति देने के बाद आपको सेवा को कॉन्फ़िगर करना होगा। अगर ऐसा कुछ है जो केवल आपकी आंखें देखता है, तो शायद यह एक बड़ा सौदा नहीं है लेकिन विकास की उस शैली से बचने के लिए यह एक अच्छी आदत है (सुरक्षा कारणों से भी)। –

+1

अपडेट: विंडोज विस्टा और विन 7 में, डेस्कटॉप इंटरैक्शन को पूरी तरह से हटाने की अनुमति देने का विकल्प हटा दिया गया था। पोस्टिंग समय पर इसका एहसास नहीं हुआ। –

3

आप बस की स्थापना

EnableRaisingEvents = true; 

फिर घटना को संभालने के द्वारा onStart विधि में अपने FileSystemWatcher वस्तु सक्षम कर सकते हैं। इससे हो जाना चाहिए।

+0

डिफ़ॉल्ट मान सत्य होगा – Peru

+1

शायद। [एमएसडीएन] (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.enableraisingevents.aspx) - "सही है अगर घटक सक्षम है, अन्यथा, गलत। डिफ़ॉल्ट गलत है। अगर आप विजुअल स्टूडियो 2005 में एक डिजाइनर पर घटक का उपयोग कर रहे हैं, डिफ़ॉल्ट सच है। " –

1

आप एक प्रतिनिधि इस लेख http://www.codeproject.com/Articles/18521/How-to-implement-a-simple-filewatcher-Windows-serv

भी पढ़ने के लिए खिड़कियों सेवा में इस प्रतिनिधि on_start है की तरह

myWatcher.Changed += new FileSystemHandler(FSWatcherTest_Changed); 

private void FSWatcherTest_Changed(object sender, 
       System.IO.FileSystemEventArgs e) 
{ 
    //code here for newly changed file or directory 
} 

और इसलिए

पर मैं तुम्हें सिफारिश करेंगे बदल गया है संभाल करने के लिए बना सकते हैं