【问题标题】:UWP C# - Access mobile phone filesUWP C# - 访问手机文件
【发布时间】:2019-03-13 23:47:27
【问题描述】:

我正在编写某种文件同步 UWP 程序。这个应用程序将在 Windows 桌面上运行,并将文件同步到我的移动设备,一部 android 手机。我的手机已插入我的开发 PC 上的 USB 端口,并在文件资源管理器中被视为“我的设备”。通过文件资源管理器,我可以访问手机的主存储并创建文件。

在我的应用清单中,我为扩展名为“.profile”的文件添加了文件类型关联声明。

当我的应用程序尝试使用以下代码创建配置文件“myprofile.profile”时,它会失败并返回对应于拒绝访问错误的 COMException 0x80004005。 profileDevice 变量的类型是 StorageDevice。

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

知道我想做的事情是否可行,如果可以,怎么做?

【问题讨论】:

    标签: c# mobile uwp access-denied


    【解决方案1】:

    在将文件同步到可移动存储之前。您需要声明特定的文件类型。如果您的文件类型是 .txt,则需要将类型扩展名添加到 File Type Associations 功能。

    更多信息请参考document

    请注意,因为文件传输协议是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.
    }
    

    【讨论】:

    • 正如我所说,我已经在清单中创建了文件类型。另外,是的,这是一个最终将复制文件的同步应用程序。但我描述为我的问题是文件创建。我仍然需要创建一个配置文件来保存设备的元数据,以便它可以同步到任何安装了我的应用的 PC。
    • 是的,我认为更好的方法是您可以在应用的本地文件夹中创建配置文件,然后复制到手机。
    • 这不是一个选项。目标是能够将移动设备插入任何拥有此文件的 PC 上,并且配置文件将被执行。我已经看到了一些关于 mtp(媒体传输协议)的东西,我会看看这是否能完成这项工作。
    猜你喜欢
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    相关资源
    最近更新 更多