2012-07-06 26 views
11

का उपयोग करके मैंने पाया है कि मैंने एक छोटा ऐप बनाया है जो Win7-PC पर चल रहा है। यह सब करता है, सुबह 1:00 बजे नेटवर्क ड्राइव की सामग्री की जांच करना है (और इसकी स्थानीय हार्ड ड्राइव पर किसी फ़ोल्डर में इसकी तुलना करें), और यदि मतभेद हैं, तो इस फ़ोल्डर में मतभेदों की प्रतिलिपि बनाएँ ।एप्लिकेशन का कहना है कि नेटवर्क ड्राइव मौजूद नहीं है, लेकिन OpenFileDialog

समस्या यह है कि कभी-कभी यह नेटवर्क ड्राइव नहीं ढूंढ पाती है।

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

जब यह कहता है कि नेटवर्क ड्राइव नहीं मिल पाती है, तो मैं मैन्युअल रूप से एक ही ऐप पर बटन दबा सकता हूं, ओपनफाइलडियलोग में ड्राइव का चयन करें (ड्राइव अक्षर कभी नहीं बदलता), और ऐप एक जोड़े में निर्दोष चलाएगा दिनों का फिर समस्या फिर से होती है।

सवाल यह है कि: मेरे ऐप पर OpenFileDialog के माध्यम से नेटवर्क ड्राइव का उपयोग क्यों किया जा सकता है, लेकिन मेरा ऐप नहीं कर सकता है? निर्धारित करने के लिए ड्राइव वर्तमान या नहीं है:

मेरे एप्लिकेशन को इस समारोह ("\ Y" के साथ कहा जाता है): का उपयोग कर कॉपी-प्रक्रिया शुरू

public bool fn_drive_exists(string par_string) 
    { 
     DirectoryInfo di_dir = new DirectoryInfo(par_string); 
     if (di_dir.Exists) 
     { 
      return true; 
     } 

     return false; 
    } 

... और कभी कभी यह एक झूठी देता है, जब तक मैं OpenFileDialog का उपयोग करके "इसे जगाता हूं"।

OpenFileDialog क्या करता है, मेरा ऐप नहीं करता है?

+3

कैसे के बारे में आप '\\ सर्वर \ मैप किया गया नेटवर्क चालक के बजाय sharedFolder'' Y में पारित : '? क्या यह एक ही समस्या है? –

+0

इसके अलावा, fn_drive_exists के आसपास कुछ पुनः प्रयास तर्क डालने का प्रयास करें (शायद लूप 5 बार प्रति सेकंड 6 लूप के साथ)। –

+1

यूएनसी पथ की तरह लगता है आपके मामले में काम करेगा। इसे देखें [एसओ पोस्ट] (http://stackoverflow.com/questions/133660/how-can-i-access-a-mapped-network-drive-with-system-io-directoryinfo) –

उत्तर

1

इस SO post के अनुसार, यदि आप मैप किए गए नेटवर्क ड्राइव के बजाय यूएनसी पथ का उपयोग करते हैं तो समस्या समाप्त होनी चाहिए।

0

अपने गंतव्य स्थैतिक IP पता है, मेरा सुझाव है कि आप नेटवर्क ड्राइव के लिए बजाय कि आईपी पते का उपयोग डोमेन नाम का

0

This SO post आप क्या वर्णन किया है करने के लिए एक समान परिदृश्य का वर्णन।

उस प्रश्न के उत्तर के रूप में पोस्ट किए गए लिंक में से एक ने मुझे this MSDN article का नेतृत्व किया जो मैप किए गए ड्राइव अक्षर का उपयोग करके साझा नेटवर्क ड्राइव तक पहुंचने का प्रयास करते समय त्रुटियों का सामना कर सकता है।

माइक्रोसॉफ्ट का सुझाव (नीचे देखें) बस यूएनसी पथ का उपयोग करना है।

एक सेवा (या किसी अन्य सुरक्षा संदर्भ में चल रही कोई भी प्रक्रिया) जो रिमोट संसाधन तक पहुंचनी चाहिए उसे संसाधन तक पहुंचने के लिए यूनिवर्सल नेमिंग कन्वेंशन (यूएनसी) नाम का उपयोग करना चाहिए।

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

इस सिद्धांत का परीक्षण करने के लिए, अपेक्षाकृत कम अंतराल (प्रत्येक 10 मिनट, शायद?) पर नेटवर्क ड्राइव पर कुछ डेटा लिखने का प्रयास करें और विंडोज़ को विश्वास दिलाएं कि ड्राइव अभी भी सक्रिय है।एक ही बात के लिए अपने स्वयं विधि लिखने की बजाय

System.IO.Directory.Exists(par_string); 

:

0

तुम भी इस्तेमाल करने की कोशिश कर सकते हैं। मैं उम्मीद करता हूं कि एक फ्रेमवर्क विधि नेटवर्क ड्राइव को "जागृत" करने में सक्षम होगी। नोट: विधि यूएनसी पथों के लिए भी काम करता है (\\<server name or IP address>\<shared folder> जैसे कुछ)

0

हार्वे की तरह, फ़ोल्डर तक पहुंचने के लिए यूएनसी पथ का उपयोग करें, उदाहरण के लिए \\ server \ sharedfolder। \\ सर्वर के स्थान पर सर्वर का नाम उपयोग करें। आपके कंप्यूटर का नाम है और सर्वर भी करता है। यदि आप इसे जानते हैं तो आप आईपी पते का भी उपयोग कर सकते हैं। आप फ़ाइलों के पथ के साथ \ sharedfolder को प्रतिस्थापित करते हैं। कुछ उदाहरण:

\\ AppsServer \ ग $ \ Program Files (x86)

\\ FileServer1 \ घ $ \ Users \ जॉन \ My Documents

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

\\ सर्वर \ MyShare