2017-03-05 2 views
8

विंडोजफॉर्म टेक्नोलॉजी का उपयोग करके, मैं एक ऐसी फाइल की प्रतिलिपि बनाने की कोशिश कर रहा हूं जो स्थानीय रूप से हार्ड ड्राइव (सी: \) पर यूएसबी के माध्यम से कनेक्ट किए गए स्मार्टफोन डिवाइस पर संग्रहीत फ़ोल्डर में संग्रहीत है।एक फ़ाइल को एक स्मार्टफोन फ़ोल्डर में कॉपी करने के लिए मुझे किस Win32 फ़ंक्शन का उपयोग करना चाहिए?

एक्सप्लोरर नेविगेशन बार में MyPCName\MyName\Card\Android के रूप में मित्रवत नामों का उपयोग करके "पथ" फ़ोल्डर का प्रतिनिधित्व किया गया है, और ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_04e8&pid_6860&ms_comp_mtp&samsung_android#6&612ff8b&1&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\SID-{20002,SECZ9519043CHOHB01,31426543616}\{01A00139-011B-0124-3301-29011C013501} आंतरिक रूप से विंडोज़ में है।

मैं COM का उपयोग कर Shell.BrowseForFolder विधि तो लौट आए वस्तु की FolderItem.Path संपत्ति की जाँच करके कि "आंतरिक पथ" प्राप्त की।

तब पथ प्राप्त करने के बाद मैं दोनों CopyFile और CopyFileEx Win32 कार्यों की कोशिश की फ़ाइल की प्रतिलिपि करने पर वे काम नहीं किया। वे निर्देशिका पथ को पहचानने में असमर्थ थे।

वाक्य रचना मैं इस्तेमाल किया इस तरह था:

Dim dirPath As String = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_04e8&pid_6860&ms_comp_mtp&samsung_android#6&612ff8b&1&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\SID-{20002,SECZ9519043CHOHB01,31426543616}\{01A00139-011B-0124-3301-29011C013501}" 
NativeMethods.CopyFile("C:\MyFile.ext", dirPath & "\MyFile.ext", failIfExists:=True) 

कि कोड CopyFile() फ़ंक्शन झूठी में और Marshal.GetLastWin32Error() समारोह एक 0x3 Win32 त्रुटि कोड देता है।


तो एक:

CopyFile/CopyFileEx परिभाषाओं मैं इस्तेमाल किया Pinvoke.net वेबसाइट पर प्रकाशित किए जाते हैं एक ही (सी # संस्करण) थे उपयोगकर्ता फ़ाइल को प्रतिलिपि बना सकता है बस उसे एक्सप्लोरर इंस्टेंस से स्मार्टफोन निर्देशिका में खींच रहा है, तो मुझे लगता है कि यह स्पष्ट है कि इसे प्रोग्राममैटॉल को पुन: उत्पन्न किया जा सकता है y बस उसी Win32 फ़ंक्शंस को ढूंढना और उपयोग करना जो विंडोज़ यूआई पक्ष से उस तरह के कॉपी ऑपरेशन को करने के लिए स्वयं का उपयोग करता है। तो मैं गलत क्या कर रहा हूँ? CopyFile/CopyFileEx फ़ाइल की प्रतिलिपि क्यों नहीं बना सकता? और मैं इसे कैसे कॉपी कर सकता हूं?

ध्यान दें कि मैं सी # या अन्य वीबी.नेट में लिखे गए समाधान की तलाश कर रहा हूं जिसे केवल प्रबंधित कोड का उपयोग करके हल किया जा सकता है या अन्यथा अप्रबंधित कोड पी/Win32 कार्यों को आमंत्रित करना, शैल जैसे COM पुस्तकालयों के उपयोग को छोड़कर COM ऑब्जेक्ट्स (जो CopyHere() विधि प्रदान करता है)। मैं सीखना और समझना चाहता हूं कि Win32 API सदस्यों का उपयोग करके मैं इस प्रकार की फ़ाइल कॉपी ऑपरेशन कैसे कर सकता हूं।

+0

आप एक्सप्लोरर में एसडी कार्ड फ़ोल्डर खोलते हैं, [पाली-राइट क्लिक] (http://superuser.com/ q/582980/52365) एक फ़ाइल और पथ के रूप में कॉपी करें पर क्लिक करें, क्लिपबोर्ड में आपको किस प्रकार का पथ मिलता है? – GSerg

+0

@GSerg ऐसा लगता है कि CopyAsPath खोल एक्सटेंशन इस प्रकार के उपकरणों के लिए काम नहीं करता है, या कम से कम इस विशिष्ट डिवाइस के लिए, संदर्भ-मेनू में "पथ के रूप में कॉपी करें" विकल्प दिखाया नहीं गया है जैसे यह सामान्य (हार्ड के लिए दिखाया गया है) ड्राइव) फ़ोल्डरों। टिप्पणी – ElektroStudios

+1

के लिए धन्यवाद ठीक है, आप [Procmon] (https://technet.microsoft.com/en-us/sysinternals/processmonitor) को भी आजमा सकते हैं। फ़िल्टर को एक्सप्लोरर प्रक्रिया में सेट करें और देखें कि यह क्या कॉल करता है और किस पैरामीटर के साथ। – GSerg

उत्तर

1

आप विंडोज पोर्टेबल डिवाइस एपीआई की तलाश में हैं।

https://msdn.microsoft.com/en-us/library/windows/desktop/dd388998(v=vs.85).aspx

संपादित करें: मैं सफलतापूर्वक इस एपीआई का इस्तेमाल किया है, सी # में COM इंटरॉप का उपयोग कर, पढ़ने/मेरे Android Galaxy S3 पर फ़ाइलें लिखने के लिए।

आप निम्न ब्लॉग पर सी # में इस API का उपयोग के बारे में अच्छी जानकारी पा सकते हैं: https://cgeers.wordpress.com/category/programming/wpd/

+0

सुझाव के लिए धन्यवाद। मैंने अपने .NET प्रोजेक्ट में संबंधित WPD COM लाइब्रेरी का संदर्भ दिया है, लेकिन वास्तव में मुझे डिवाइसों को सूचीबद्ध करने के बारे में कोई जानकारी नहीं है, वांछित एक का चयन करें और आखिरकार फ़ाइलों को अपने फ़ोल्डर्स में कॉपी करें। इसके अलावा एमएसडीएन नमूने केवल सी ++ https://msdn.microsoft.com/en-us/library/windows/desktop/dd798115(v=vs.85).aspx और कोडप्लेक्स या गिरहब जैसी साइटों में सी # में मौजूदा नमूने के लिए हैं बहुत बड़ी सामान्य परियोजनाएं टोपी फाइलों को स्थानांतरित करने वाली कई और चीजें शामिल करती हैं, या दूसरे शब्दों में: डब्ल्यूपीडी में एक अनुभवहीन उपयोगकर्ता के लिए विश्लेषण का दर्दनाक। वैसे भी मैं इसे समझने की कोशिश करने के लिए जांच रहा हूं .. – ElektroStudios

+3

मुझे नहीं लगता कि यह सलाह सही है। फ़ाइलों को कॉपी करते समय ओएस डिवाइस डिवाइस एपीआई को दूर करने में सक्षम होना चाहिए (और है)। – GSerg

+0

कृपया "गलत" या "गरीब" में यह सलाह कैसे समझाएं। या तो आप WPD-API के लिए एक विकल्प प्रदान करते हैं या आप स्वयं को ऐसी अनियंत्रित आलोचना रखते हैं। हमारे शोध ने कहा कि ऐसा करने का कोई दूसरा तरीका नहीं है, लेकिन उल्लिखित (बहुत गुंजाइश) एपीआई का उपयोग करने के लिए। इस तरह के उपकरणों के साथ काम करते समय, एक मजबूत संकेत है कि ओएस या एक्सप्लोरर वास्तव में इस एपीआई का उपयोग कर रहे हैं। –

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

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