Mit der WindowsForms-Technologie versuche ich eine Datei, die lokal auf der Festplatte (C: \) gespeichert ist, in einen Ordner zu kopieren, der auf einem angeschlossenen Smartphone-Gerät über USB gespeichert ist.
Der Ordner "path" wird in der Explorer-Navigationsleiste mit den Anzeigenamen MyPCName\MyName\Card\Android
und in Windows intern mit ::{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}
dargestellt.
Ich habe diesen "internen Pfad" mit dem COM Shell.BrowseForFolder Methode und dann die FolderItem.Path Eigenschaft des zurückgegebenen Objekts.
Nachdem ich den Pfad bekommen habe, habe ich sowohl CopyFile und CopyFileEx Win32 Funktionen, um die Datei zu kopieren, aber sie haben nicht funktioniert. Sie schienen den Verzeichnispfad nicht zu erkennen.
Die Syntax, die ich verwendet habe, war wie folgt:
%Vor% In diesem Code gibt die CopyFile()
Funktion False zurück und die Marshal.GetLastWin32Error()
Funktion gibt einen 0x3 Win32 Fehlercode zurück.
Die von mir verwendeten CopyFile / CopyFileEx-Definitionen waren die gleichen wie die auf der Pinvoke.net-Website (C # -Versionen) veröffentlichten:
Wenn ein Benutzer die Datei einfach von einer Explorer-Instanz in das Smartphone-Verzeichnis ziehen kann, ist es offensichtlich, dass dies programmatisch reproduziert werden kann, indem man dieselben Win32-Funktionen findet und verwendet, die Windows selbst verwendet Kopiervorgang von der UI-Seite. Was mache ich dann falsch? Warum kann CopyFile / CopyFileEx die Datei nicht kopieren? Und wie kann ich es kopieren?
Beachten Sie, dass ich nach einer in C # oder VB.NET geschriebenen Lösung suche, die nur mit verwaltetem Code oder mit nicht verwaltetem Code P / Aufrufen der Win32-Funktionen gelöst werden kann, mit Ausnahme der Verwendung von COM-Bibliotheken wie der Shell COM Objekte (die eine CopyHere()
-Methode bereitstellt). Ich möchte lernen und verstehen, wie ich diese Art von Dateikopiervorgang mit den Win32-API-Mitgliedern durchführen konnte.