Вопрос:

Какую функцию Win32 я должен использовать для копирования файла в папку смартфона?

c# .net vb.net file winapi

388 просмотра

1 ответ

7868 Репутация автора

Используя технологию WindowsForms, я пытаюсь скопировать файл, который локально хранится на жестком диске (C: \), в папку, сохраненную на подключенном смартфоне через USB.

Папка «путь» представлена ​​с использованием понятных имен, как 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}внутри 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)

В этом коде CopyFile()функция возвращает False, а Marshal.GetLastWin32Error()функция возвращает код ошибки Win32 0x3 .

Определения CopyFile / CopyFileEx, которые я использовал, были такими же, как и опубликованные на веб-сайте Pinvoke.net (версии C #):


Если пользователь может скопировать файл, просто перетащив его из экземпляра Explorer в каталог смартфона, то я думаю, что очевидно, что это можно воспроизвести программно, просто найдя и используя те же функции Win32, которые Windows использует сама для выполнения такого рода операций копирования. со стороны пользовательского интерфейса. Тогда что я делаю не так? Почему CopyFile / CopyFileEx не может скопировать файл? И как я могу скопировать это?

Обратите внимание, что я ищу решение, написанное на C # или VB.NET, которое можно решить, просто используя управляемый код или используя неуправляемый код P / Вызывая функции Win32, за исключением использования COM-библиотек, таких как Shell COM-объекты (которые предоставляет CopyHere()метод). Я хотел бы узнать и понять, как я могу выполнить такую ​​операцию копирования файлов с использованием членов Win32 API.

Автор: ElektroStudios Источник Размещён: 05.03.2017 09:07

Ответы (1)


1 плюс

62 Репутация автора

Решение

Вы ищете API переносных устройств Windows.

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

Изменить: я успешно использовал этот API, используя COM Interop в C #, для чтения / записи файлов на моем Android Galaxy S3.

Вы также можете найти полезную информацию об использовании этого API в C # в следующем блоге: https://cgeers.wordpress.com/category/programming/wpd/

Автор: FrantzX Размещён: 05.03.2017 09:33
Вопросы из категории :
32x32