UWP C # - доступ к файлам мобильного телефона - PullRequest
1 голос
/ 14 марта 2019

Я пишу какую-то программу для синхронизации файлов UWP.Это приложение будет работать на рабочем столе Windows и синхронизировать файлы с моим мобильным устройством, телефоном Android.Мой телефон подключен к моему ПК через порт USB и в проводнике файлов отображается как «Мое устройство».Из проводника файлов я могу получить доступ к основному хранилищу телефона и создать файл.

В своем манифесте приложения я добавил декларацию ассоциации типов файлов для файлов с расширением ".profile".

Когда мое приложение пытается создать файл профиля «myprofile.profile» со следующим кодом, происходит сбой COMException 0x80004005, который соответствует ошибке «Отказано в доступе».Переменная profileDevice имеет тип StorageDevice.

StorageFile profileFile = await profileDevice.RootFolder.CreateFileAsync("myProfile.profile", CreationCollisionOption.OpenIfExists);

Любая идея, если то, что я хочу сделать, возможно, и если да, то как?

1 Ответ

0 голосов
/ 15 марта 2019

Перед синхронизацией файлов на съемном носителе. вам нужно объявить конкретный тип файла. если ваш тип файла .txt , вам необходимо добавить расширение имени типа к Ассоциации типов файлов возможность.

enter image description here

Подробнее см. В этом документе

Обратите внимание, поскольку протокол передачи файлов - MTP, поэтому вы не можете использовать метод CreateFileAsync. Пожалуйста, попробуйте использовать метод CopyAsync и скопируйте файл со своего компьютера на телефон.

StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices; 
StorageFolder sdCard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();

if (sdCard != null)
{
    var rootFolder = await sdCard.GetFoldersAsync();
    var folder = rootFolder[0];
    var picker = new FileOpenPicker
    {
        FileTypeFilter = { ".jpg", ".png", ".gif", ".txt" },
        SuggestedStartLocation = PickerLocationId.PicturesLibrary
    };
    var sourceFile = await picker.PickSingleFileAsync();
    if (sourceFile != null)
    {
        var newfile = await sourceFile.CopyAsync(folder, sourceFile.Name, NameCollisionOption.ReplaceExisting);
    }
}
else
{
    // No SD card is present.
}
...