विंडोजफॉर्म टेक्नोलॉजी का उपयोग करके, मैं एक ऐसी फाइल की प्रतिलिपि बनाने की कोशिश कर रहा हूं जो स्थानीय रूप से हार्ड ड्राइव (सी: \) पर यूएसबी के माध्यम से कनेक्ट किए गए स्मार्टफोन डिवाइस पर संग्रहीत फ़ोल्डर में संग्रहीत है।एक फ़ाइल को एक स्मार्टफोन फ़ोल्डर में कॉपी करने के लिए मुझे किस 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 त्रुटि कोड देता है।
- http://www.pinvoke.net/default.aspx/kernel32/CopyFile.html
- http://www.pinvoke.net/default.aspx/kernel32.copyfileex
तो एक:
CopyFile/CopyFileEx परिभाषाओं मैं इस्तेमाल किया Pinvoke.net वेबसाइट पर प्रकाशित किए जाते हैं एक ही (सी # संस्करण) थे उपयोगकर्ता फ़ाइल को प्रतिलिपि बना सकता है बस उसे एक्सप्लोरर इंस्टेंस से स्मार्टफोन निर्देशिका में खींच रहा है, तो मुझे लगता है कि यह स्पष्ट है कि इसे प्रोग्राममैटॉल को पुन: उत्पन्न किया जा सकता है y बस उसी Win32 फ़ंक्शंस को ढूंढना और उपयोग करना जो विंडोज़ यूआई पक्ष से उस तरह के कॉपी ऑपरेशन को करने के लिए स्वयं का उपयोग करता है। तो मैं गलत क्या कर रहा हूँ? CopyFile/CopyFileEx फ़ाइल की प्रतिलिपि क्यों नहीं बना सकता? और मैं इसे कैसे कॉपी कर सकता हूं?
ध्यान दें कि मैं सी # या अन्य वीबी.नेट में लिखे गए समाधान की तलाश कर रहा हूं जिसे केवल प्रबंधित कोड का उपयोग करके हल किया जा सकता है या अन्यथा अप्रबंधित कोड पी/Win32 कार्यों को आमंत्रित करना, शैल जैसे COM पुस्तकालयों के उपयोग को छोड़कर COM ऑब्जेक्ट्स (जो CopyHere()
विधि प्रदान करता है)। मैं सीखना और समझना चाहता हूं कि Win32 API सदस्यों का उपयोग करके मैं इस प्रकार की फ़ाइल कॉपी ऑपरेशन कैसे कर सकता हूं।
आप एक्सप्लोरर में एसडी कार्ड फ़ोल्डर खोलते हैं, [पाली-राइट क्लिक] (http://superuser.com/ q/582980/52365) एक फ़ाइल और पथ के रूप में कॉपी करें पर क्लिक करें, क्लिपबोर्ड में आपको किस प्रकार का पथ मिलता है? – GSerg
@GSerg ऐसा लगता है कि CopyAsPath खोल एक्सटेंशन इस प्रकार के उपकरणों के लिए काम नहीं करता है, या कम से कम इस विशिष्ट डिवाइस के लिए, संदर्भ-मेनू में "पथ के रूप में कॉपी करें" विकल्प दिखाया नहीं गया है जैसे यह सामान्य (हार्ड के लिए दिखाया गया है) ड्राइव) फ़ोल्डरों। टिप्पणी – ElektroStudios
के लिए धन्यवाद ठीक है, आप [Procmon] (https://technet.microsoft.com/en-us/sysinternals/processmonitor) को भी आजमा सकते हैं। फ़िल्टर को एक्सप्लोरर प्रक्रिया में सेट करें और देखें कि यह क्या कॉल करता है और किस पैरामीटर के साथ। – GSerg