如何浏览Windows 10应用程序中的相邻文件?

时间:2015-08-10 18:51:07

标签: c# windows-store-apps filesystems

我尝试将照片编辑器/查看器设为Windows 10 App。我让用户通过char dato = 0; void setup() { Serial.begin(9600);//9600 is the default baudrate of the HC-05 (you can change it by AT commands, google it if you want) //pinMode(13, OUTPUT); //enable this pin if you want to use de LED idea //digitalWrite(13, HIGH); } ////////////////////////////////////////////////////////////////////////// void serialEvent() { //if you have received serial data while (Serial.available() > 0) { char dato = (byte)Serial.read();//save the byte Serial.write(dato);//send the just received byte (echo) } } /////////////////////////////////////////////////////////////////////////// void loop() { } 打开图像文件。该程序还应该能够从与所选文件相同的文件夹中浏览其他图像(例如,通过上一个和下一个按钮),但是存在问题。我甚至无法获得这些图像的文件名。

我尝试过的所有方法都只返回FileOpenPicker ...

null

那么,如何浏览与已打开文件相同的文件夹中的其他文件?

我发现我可以使用// File picker to let user select the image file - works OK var picker = new Windows.Storage.Pickers.FileOpenPicker(); picker.FileTypeFilter.Add(".jpg"); var file = await picker.PickSingleFileAsync(); // These methods to get neighboring files do not work // 1. using Directory.GetFiles - it returns empty string string filePaths[] = Directory.GetFiles(Path.GetDirectoryName(file.Path)); // 2. using GetParentAsync - it returns null instead of file's parent folder var folder = await file.GetParentAsync(); var files = await folder.GetFilesAsync(); 来访问给定的文件夹,但如果用户需要通过两个选择器(一个用于图像文件,另一个用于实际文件),那将是一个非常愚蠢的解决方案文件夹)。

编辑:在App Manifest中检查了可移动存储和图片库后,FolderPicker开始适用于USB驱动器,但是当我从任何本地驱动器打开图像文件时,它仍然返回null。为什么它不适用于本地硬盘驱动器,这是大量照片的逻辑存储设备?仅将数据存储到小型SSD系统驱动器或USB驱动器上的用户文件夹是非常有限的。

2 个答案:

答案 0 :(得分:1)

基本上,如果用户通过FilePicker选择“文件”,则您只拥有“文件”的权限。不适用于父文件夹。 (如果您具有图片库的访问权限,并且该文件位于库中,则可以访问该文件夹。但是,权限来自库访问,而不是来自文件。)

这是通过FileBroker设计的WinRT文件访问规则..这很难克服。

我的推荐(以及许多storeapp图片浏览器选择这种方式,包括我的应用程序PICT8)是,要求用户使用FolderPicker设置用户主要用于保存图像文件的文件夹。 您可以使用FAL或MRU保留文件夹的访问权限。您可以向用户显示文件列表,而不是使用FilePicker。

StorageApplicationPermissions class

而且......我对另一个主题的回答也可以帮助你:Access all files in folder from FileActivated file

答案 1 :(得分:0)

您从StorageFile获得FileOpenPicker。您可以使用GetParentAsync方法获取包含文件夹,然后调用GetFilesAsync以获取文件夹中的文件。

var folder = await file.GetParentAsync();
var files = await folder.GetFilesAsync();
var next = files.SkipWhile(x => x.Name == file.Name)
                .Skip(1)
                .First();

正如您所看到的,您可以获取文件夹中的下一个文件,跳过ech文件,直到找到您的当前文件。然后跳过它并在文件后取第一个。

我认为通过在OrderBy结果上分别调用OrderByDescending files来优先订购文件会更好。
您可以传递lambda表达式来选择要排序的属性或值。