2008-08-20 18 views
12

मैं विंडोज नेटवर्क शेयर पर फ़ाइलों की प्रतिलिपि बनाने के लिए एक मजबूत तरीका ढूंढ रहा हूं जो अंतःक्रियात्मक कनेक्टिविटी का सहिष्णु है। आवेदन अक्सर बड़े अस्पतालों में वायरलेस, मोबाइल वर्कस्टेशन पर उपयोग किया जाता है, और मुझे लगता है कि कनेक्टिविटी को या तो क्षण में या कई मिनटों में खोया जा सकता है। शामिल फाइलें आम तौर पर लगभग 200 केबी - 500 केबी आकार में होती हैं। एप्लिकेशन वीबी 6 (यूघ) में लिखा गया है, लेकिन हम अक्सर विंडोज डीएलएल कॉल का उपयोग कर समाप्त होते हैं।एक इंटरमीटेंट नेटवर्क कनेक्शन पर फ़ाइलों की प्रतिलिपि

धन्यवाद!

उत्तर

5

मुझे आपकी वास्तविक समस्या के बारे में अस्पष्ट नहीं है, इसलिए मैं कुछ विचार फेंक दूंगा।

  • क्या आप पुनरारंभ करने योग्य प्रतियां (ऐसे छोटे फ़ाइल आकारों के साथ, ऐसा लगता है कि यह एक सौदा का बड़ा नहीं होगा)? यदि ऐसा है, तो CopyFileEx with COPYFILERESTARTABLE
  • देखें क्या आप सत्यापित करने योग्य प्रतियां चाहते हैं? लगता है कि आपके पास हैश की पुष्टि करके पहले से ही है।
  • क्या आप बेहतर प्रदर्शन चाहते हैं? यह कठिन होगा, क्योंकि ऐसा लगता है कि आप सर्वर पर कुछ भी नहीं चला सकते हैं। अन्यथा, TransmitFile मदद कर सकता है।
  • क्या आप सिर्फ आग चाहते हैं और ऑपरेशन भूल जाते हैं? मुझे लगता है कि रोबोकॉपी को खोलना, या TeraCopy या कुछ काम करेगा - लेकिन यह मेरे लिए थोड़ा हैकी लगता है।
  • क्या आप जानना चाहते हैं कि नेटवर्क कब वापस आता है? IsNetworkAlive आपका उत्तर है।

मैं अब तक क्या पता के आधार पर, मुझे लगता है कि निम्नलिखित छद्म कोड मेरा दृष्टिकोण होगा:

sourceFile = Compress("*.*"); 
destFile = "X:\files.zip"; 

int copyFlags = COPYFILEFAILIFEXISTS | COPYFILERESTARTABLE; 
while (CopyFileEx(sourceFile, destFile, null, null, false, copyFlags) == 0) { 
    do { 
    // optionally, increment a failed counter to break out at some point 
    Sleep(1000); 
    while (!IsNetworkAlive(NETWORKALIVELAN)); 
} 

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

5

बीआईटीएस (पृष्ठभूमि इंटेलिजेंट ट्रांसफर सर्विस) का उपयोग करने का प्रयास करें। यह बुनियादी ढांचा है जो विंडोज अपडेट का उपयोग करता है, Win32 एपीआई के माध्यम से सुलभ है, और इसे विशेष रूप से संबोधित करने के लिए बनाया गया है।

आमतौर पर यह एप्लिकेशन अपडेट के लिए उपयोग किया जाता है, लेकिन किसी भी फ़ाइल चलती स्थिति में अच्छी तरह से काम करना चाहिए।

http://www.codeproject.com/KB/IP/bitsman.aspx

0

कैसे बस के बाद या इससे पहले कि आप फ़ाइल को भेजने के एक हैश भेजने, और की तुलना उस फ़ाइल के साथ प्राप्त के बारे में? कम से कम यह सुनिश्चित करना चाहिए कि आपके पास सही फ़ाइल है।

यदि आप सभी बाहर जाना चाहते हैं तो आप एक ही प्रक्रिया कर सकते हैं, लेकिन फ़ाइल के छोटे हिस्सों के लिए। फिर जब आपके पास सभी टुकड़े हों, तो उन्हें प्राप्त करने वाले अंत में शामिल हों।

+0

बिलकुल ठीक यही है। – TheSmurf

13

मैंने उत्कृष्ट परिणामों के साथ Robocopy का उपयोग किया है। डिफ़ॉल्ट रूप से, यह फ़ाइल समाप्त होने तक हर 30 सेकंड में फिर से प्रयास करेगा।

+0

RoboCopy और CopyFileEx सुझावों के लिए धन्यवाद। CopyFileEx विशेष रूप से वादा करता है। वर्तमान में, क्लाइंट एप्लिकेशन वास्तविक फ़ाइल प्रतिलिपि करने के लिए [SHFileOperation] (http://msdn.microsoft.com/en-us/library/bb762164 (VS.85) .aspx) का उपयोग कर रहा है। –

-1

एसएमएस उपलब्ध होने पर एसएमएस।

1

मैं रोबोकॉपी के समाधान के रूप में सहमत हूं ...thats क्यों उपयोगिता कहा जाता है "मजबूत फ़ाइल कॉपी"

मैं उत्कृष्ट परिणाम के साथ इस के लिए लड़ी उपयोग किया है। डिफ़ॉल्ट रूप से, यह फ़ाइल समाप्त होने तक हर 30 सेकंड में फिर से प्रयास करेगा।

और डिफ़ॉल्ट रूप से, एक लाख रिट्रीज़। यह आपके अस्थायी कनेक्शन के लिए बहुत होना चाहिए।

यह पुनरारंभ करने योग्य स्थानान्तरण भी करता है और आप पैकेट के बीच एक अंतर के साथ स्थानांतरण को भी थ्रॉटल कर सकते हैं, यह मानते हुए कि आप सभी बैंडविड्थ का उपयोग नहीं करना चाहते हैं क्योंकि अन्य प्रोग्राम समान कनेक्शन (/ आईपीजी स्विच) का उपयोग कर रहे हैं?

0

हम्म, लगता है rsync यह होता है, और सर्वर/डेमॉन की जरूरत नहीं है/स्थापित मैंने सोचा था कि यह करता है - बस $ rsync src डीएसटी।