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
这是我的挑战:
- Windows Raspi 上的物联网,C# UWP-App
- 开机或点击...
- 枚举连接的 USB 设备
- Select USB 记忆棒
- 枚举存储棒上的字段和文件夹
- 如果找到某个文件夹名称,将文件夹按原样复制到 KnownFolders.Documents
令人惊讶的是,网络上有许多半解决方案,但其中 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>
这是我的挑战:
- Windows Raspi 上的物联网,C# UWP-App
- 开机或点击...
- 枚举连接的 USB 设备
- Select USB 记忆棒
- 枚举存储棒上的字段和文件夹
- 如果找到某个文件夹名称,将文件夹按原样复制到 KnownFolders.Documents
令人惊讶的是,网络上有许多半解决方案,但其中 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>