2008-09-21 13 views
6

मैं एक सी # अनुप्रयोग बना रहा हूं जो परिवर्तन और परिवर्धन के लिए एक निर्दिष्ट निर्देशिका की निगरानी करेगा और डेटाबेस में जानकारी संग्रहीत करेगा।निर्देशिका संशोधन निगरानी

मैं संशोधनों के लिए प्रत्येक व्यक्तिगत फ़ाइल की जांच से बचना चाहता हूं, लेकिन मुझे यकीन नहीं है कि मैं फ़ाइल एक्सेस समय पर पूरी तरह भरोसा कर सकता हूं या नहीं।

निर्देशिका में हाल ही में संशोधित फ़ाइलों को प्राप्त करने के लिए उपयोग करने का सबसे अच्छा तरीका क्या होगा?

यह केवल तभी संशोधनों की जांच करेगा जब उपयोगकर्ता इसे पूछता है, यह लगातार चल रही सेवा नहीं होगी।

+0

क्या आपके पास हमेशा चल रही सेवा है, या आप चाहते हैं कि प्रोग्राम प्रत्येक सिस्टम पर हाल ही में संशोधित फ़ाइलों को पुनर्प्राप्त करने के लिए फ़ाइल सिस्टम की निगरानी किए बिना पुनर्प्राप्त करे? कृपया, प्रश्न स्पष्ट करें। –

उत्तर

1

हम्म ... दिलचस्प सवाल। शुरुआत में मैं आपको FileSystemWatcher कक्षा में इंगित करता हूं। यदि आप इसे काम करने जा रहे हैं, हालांकि, उपयोगकर्ता अनुरोध पर, तो ऐसा लगता है कि आपको शुरुआत में निर्देशिका जानकारी को स्टोर करने की आवश्यकता हो सकती है और फिर प्रत्येक बार उपयोगकर्ता अनुरोधों की तुलना करने की आवश्यकता हो सकती है। मैं शायद एक फाइलसिस्टम वाटर के साथ जाऊंगा और किसी भी तरह से अपने परिणामों को बंद कर दूंगा।

2

मुझे लगता है कि आप क्या चाहते हैं FileSystemWatcher कक्षा द्वारा प्रदान की जाती है।

यह ट्यूटोरियल वर्णन करता है कि एक सरल विंडोज सेवा में बदलाव के लिए निर्देशिका की निगरानी करने के लिए इसका उपयोग कैसे किया जाए; How to implement a simple filewatcher Windows service in C#

6

FileSystemWatcher ऑब्जेक्ट का उपयोग करें। जो कुछ आप ढूंढ रहे हैं उसे करने के लिए यहां कुछ कोड दिया गया है।

 
    // Declares the FileSystemWatcher object 
    FileSystemWatcher watcher = new FileSystemWatcher(); 

    // We have to specify the path which has to monitor 

    watcher.Path = @"\\somefilepath";  

    // This property specifies which are the events to be monitored 
    watcher.NotifyFilter = NotifyFilters.LastAccess | 
     NotifyFilters.LastWrite | NotifyFilters.FileName | notifyFilters.DirectoryName; 
    watcher.Filter = "*.*"; // Only watch text files. 

    // Add event handlers for specific change events... 

    watcher.Changed += new FileSystemEventHandler(OnChanged); 
    watcher.Created += new FileSystemEventHandler(OnChanged); 
    watcher.Deleted += new FileSystemEventHandler(OnChanged); 
    watcher.Renamed += new RenamedEventHandler(OnRenamed); 
    // Begin watching. 
    watcher.EnableRaisingEvents = true; 


    // Define the event handlers. 
    private static void OnChanged(object source, FileSystemEventArgs e) 
    { 
    // Specify what is done when a file is changed, created, or deleted. 
    } 

    private static void OnRenamed(object source, RenamedEventArgs e) 
    { 
    // Specify what is done when a file is renamed. 
    } 
1

आप केवल उपयोगकर्ता बल्कि तो हर समय पूछते हैं जब यह जाँच करने के लिए की जरूरत है, FileSystemWatcher प्रयोग नहीं करते। विशेष रूप से यदि यह एक साझा संसाधन है - आखिरी चीज जो आप चाहते हैं वह 50 क्लाइंट मशीनें समान साझा निर्देशिका देख रही हैं।

शायद यह सिर्फ एक टाइपो है, लेकिन आपको फ़ाइल एक्सेस समय पर नहीं दिखना चाहिए, आप परिवर्तन लेने के लिए फ़ाइल संशोधन समय देखना चाहते हैं। यहां तक ​​कि यह भरोसेमंद नहीं है।

मैं क्या करूँगा फ़ाइल दिनांक और बाइट आकार, या अन्य फ़ाइल सिस्टम गुणों पर कुछ प्रकार के चेकसम फ़ंक्शन को लागू करना है। इस तरह से मैं पूरी फ़ाइल में बदलावों की तलाश नहीं करूँगा - केवल इसके गुण और मैं इसे मॉनिटर करने के लिए दूरस्थ संसाधन से कनेक्शन रखने की कोशिश करने के बजाय अनुरोध पर कर सकता हूं।

एक भारी समाधान यह दूसरी तरफ करना होगा, और साझा ड्राइव की मेजबानी करने वाली मशीन पर एक सेवा स्थापित करें जो फ़ाइलों की निगरानी कर सकती है और परिवर्तनों को ध्यान में रख सकती है। फिर आप फाइलों को छूने के बजाए सेवा से पूछ सकते हैं - लेकिन शायद यह अधिक है।

संबंधित मुद्दे