Ele*_*ios 8 .net c# vb.net winapi file
使用WindowsForms技术,我试图通过USB将本地存储在硬盘驱动器(C:\)上的文件复制到存储在连接的智能手机设备上的文件夹中.
文件夹"path"使用友好名称表示,如MyPCName\MyName\Card\Android在Explorer导航栏中,以及::{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}在Windows内部.
我通过使用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)
Run Code Online (Sandbox Code Playgroud)
在该代码中,CopyFile()函数返回False,Marshal.GetLastWin32Error()函数返回0x3 Win32错误代码.
我使用的CopyFile/CopyFileEx定义与Pinvoke.net网站(C#版本)上发布的定义相同:
如果用户只需将文件从资源管理器实例拖到智能手机目录即可复制文件,那么我认为很明显,这可以通过编程方式再现,只需找到并使用Windows自身执行该类复制操作的相同Win32函数从UI方面.那我做错了什么?为什么CopyFile/CopyFileEx不能复制文件?我怎么能复制它?
请注意,我正在寻找用C#或VB.NET编写的解决方案,只需使用托管代码或使用非托管代码P /调用Win32函数即可解决,除了使用Shell库对象等COM库(即提供了一种CopyHere()方法).我想学习并了解如何使用Win32 API成员执行此类文件复制操作.
小智 1
您正在寻找 Windows 便携式设备 API。
https://msdn.microsoft.com/en-us/library/windows/desktop/dd388998(v=vs.85).aspx
编辑:我已成功使用此 API(使用 C# 中的 COM Interop)在我的 Android Galaxy S3 上读取/写入文件。
您还可以在以下博客中找到有关在 C# 中使用此 API 的详细信息: https: //github.com/geersch/WPD