Korzystając z technologii WindowsForms, próbuję skopiować plik zapisany lokalnie na dysku twardym (C: \) do folderu zapisanego na podłączonym smartfonie przez USB.Którą funkcję Win32 należy użyć do skopiowania pliku do folderu smartfona?
Folder "ścieżka" jest reprezentowany przy użyciu przyjaznych nazw jako MyPCName\MyName\Card\Android
w pasku nawigacyjnym Eksploratora, a jako ::{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}
wewnętrznie w systemie Windows.
że ów „wewnętrzną ścieżkę” za pomocą COM Shell.BrowseForFolder Sposób następnie sprawdzenie właściwości obiektu zwróconej FolderItem.Path.
Następnie po otrzymaniu ścieżkę Próbowałem zarówno CopyFile i CopyFileEx funkcje Win32 skopiować plik, ale nie działa. Wydawało się, że nie są w stanie rozpoznać ścieżki do katalogu.
Składnia Kiedyś było tak:
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)
W tym kodem funkcja CopyFile()
powraca fałszywy a funkcja Marshal.GetLastWin32Error()
zwraca 0x3 Win32 kod błędu.
W CopyFile/CopyFileEx definicje I stosowane były takie same jak te, opublikowane na stronie internetowej Pinvoke.net (C# wersje):
- http://www.pinvoke.net/default.aspx/kernel32/CopyFile.html
- http://www.pinvoke.net/default.aspx/kernel32.copyfileex
Jeśli użytkownik może skopiować plik po prostu przeciągając go z instancji Explorera do katalogu smartfona, wtedy myślę, że jest oczywiste, że można to odtworzyć programowo y po prostu znalezienie i używanie tych samych funkcji Win32, które Windows sam używa do wykonywania tego rodzaju operacji kopiowania ze strony interfejsu użytkownika. Więc co robię źle? Dlaczego CopyFile/CopyFileEx nie może skopiować pliku? I jak mogę to skopiować?
Zauważ, że szukam rozwiązania napisanego w języku C# lub VB.NET, które można rozwiązać za pomocą kodu zarządzanego lub używając niezarządzanego kodu P/Wywoływanie funkcji Win32, z wyjątkiem użycia bibliotek COM, takich jak Shell Obiekty COM (zapewniające metodę CopyHere()
). Chciałbym się nauczyć i zrozumieć, w jaki sposób mogę wykonać tego rodzaju operację kopiowania plików przy użyciu członków Win32 API.
Po otwarciu folderu w Eksploratorze karta SD, [shift-right click] (http://superuser.com/ q/582980/52365) plik i kliknij opcję Kopiuj jako ścieżkę, jaki rodzaj ścieżki znajduje się w schowku? – GSerg
@GSerg Wygląda na to, że rozszerzenie powłoki CopyAsPath nie działa dla tego rodzaju urządzeń, lub przynajmniej dla tego konkretnego urządzenia, opcja "Kopiuj jako ścieżkę" w menu kontekstowym nie jest wyświetlana tak, jak jest pokazana dla normalnej (twarda napęd) folderów. Dzięki za komentarz – ElektroStudios
Cóż, możesz także spróbować [Procmon] (https://technet.microsoft.com/en-us/sysinternals/processmonitor). Ustaw filtr na proces eksploratora i zobacz, co wywołuje i jakie parametry. – GSerg