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

时间:2018-10-02 21:03:13

标签: c# uwp raspberry-pi iot windows-10-iot-core

这是我的挑战:

  • Raspi上的Windows IoT,C#UWP-App
  • 在启动或快打...
    • 枚举连接的USB设备
    • 选择USB记忆棒
    • 枚举棍子上的字段和文件夹
    • 如果找到某个文件夹名称,则将文件夹原样复制到KnownFolders.Documents

令人惊讶的是,网络上有很多解决方案,但几乎没有一个可行。

我尝试过的一些事情:

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

目前为止工作正常,但后来停滞了。

是的,清单库中激活了图片库,文件定义,可移动设备等功能。我不敢相信这个基本的事情真的很难解决吗?

1 个答案:

答案 0 :(得分:0)

有一个示例我在带有Windows 10 IoT核心版的Raspberry Pi 3上进行了测试。这个对我有用。

源文件夹:USB驱动器根目录中的测试文件夹(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>