UWP/C#/IoT/RPi:从 RPi 上的 Win IoT 访问 USB 设备(Stick)并复制到 KnownFolders

UWP/C#/IoT/RPi: Access USB Device (Stick) from Win IoT on RPi AND Copy to KnownFolders

这是我的挑战:

令人惊讶的是,网络上有许多半解决方案,但其中 none 几乎行不通。

我试过的一些东西:

var removableDeviceList = await KnownFolders.RemovableDevices.GetFoldersAsync();
            if (removableDeviceList.Count > 0)
            {
                StorageFolder targetDevice = removableDeviceList.FirstOrDefault();
                ListBox.Items.Add(targetDevice.Name);
}

目前有效,但之后卡住了。

是的,图片库、文件定义、可移动设备等功能已在清单中激活。不敢相信这个基础的东西真的这么难解决?

我在 Raspberry Pi 3 和 Windows 10 IoT Core 上测试了一个示例。这个对我有用。

源文件夹:U盘根目录(E:\test)中的测试文件夹。共有三个文件:hello.txt、welcome1.png、welcome3.jpg .

目标文件夹:KnownFolders.DocumentsLibrary 根文件夹。

以下代码完成将测试文件夹中的文件复制到 KnownFolders.DocumentsLibrary 根文件夹。

   public async void USBDriveCopyFolder()
    {
        var targetFolderName = "test";

        var removableDevice = (await KnownFolders.RemovableDevices.GetFoldersAsync()).FirstOrDefault();
        if (null == removableDevice)
        {
            System.Diagnostics.Debug.WriteLine("removableDevice is null !");
            return;
        }
        System.Diagnostics.Debug.WriteLine(removableDevice.Name + ":\n");

        var sourceFolder = await removableDevice.GetFolderAsync(targetFolderName);
        if (null == sourceFolder)
        {
            System.Diagnostics.Debug.WriteLine(targetFolderName + " folder is not found !");
            return;
        }
        System.Diagnostics.Debug.WriteLine(sourceFolder.Name + ":\n");

        var destFodler = KnownFolders.DocumentsLibrary;
        if (null == destFodler)
        {
            System.Diagnostics.Debug.WriteLine("KnownFolders.DocumentsLibrary folder get failed !");
            return;
        }

        var files = await sourceFolder.GetFilesAsync();

        foreach (var file in files)
        {
            System.Diagnostics.Debug.WriteLine(file.Name + "\n");
            await file.CopyAsync(destFodler);
        }

    }

package.appxmanifest 中的设备功能:

  <Applications>

    ...
    ...

    <Application>
      <Extensions>
        <uap:Extension Category="windows.fileTypeAssociation">
          <uap:FileTypeAssociation Name="txt">
            <uap:SupportedFileTypes>
              <uap:FileType>.txt</uap:FileType>
            </uap:SupportedFileTypes>
          </uap:FileTypeAssociation>
        </uap:Extension>
        <uap:Extension Category="windows.fileTypeAssociation">
          <uap:FileTypeAssociation Name="jpg">
            <uap:SupportedFileTypes>
              <uap:FileType>.jpg</uap:FileType>
            </uap:SupportedFileTypes>
          </uap:FileTypeAssociation>
        </uap:Extension>
        <uap:Extension Category="windows.fileTypeAssociation">
          <uap:FileTypeAssociation Name="png">
            <uap:SupportedFileTypes>
              <uap:FileType>.png</uap:FileType>
            </uap:SupportedFileTypes>
          </uap:FileTypeAssociation>
        </uap:Extension>
      </Extensions>
    </Application>
  </Applications>
  <Capabilities>
    <uap:Capability Name="picturesLibrary" />
    <uap:Capability Name="removableStorage" />
    <uap:Capability Name="documentsLibrary" />
  </Capabilities>