我正在开发通用Windows平台应用。 要继续,我需要将一个文件夹中所有文件的文件名转换为字符串数组。 get文件方法在UWP中不起作用。我尝试使用Filepicker和Storagefolder,但我不知道如何将它变成字符串数组。
// C#
FolderPicker picker= new FolderPicker();
picker.FileTypeFilter.Add("*"); StorageFolder x = await picker.PickSingleFolderAsync();
Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickedFolderToken", x);
string[] files = Directory.GetFiles(@"path\to\Assets");
textBlock.Text = files.Length.ToString();
答案 0 :(得分:1)
您可以使用Directory.EnumerateFiles
,System.IO.Path.GetFileName
和LINQ:
string[] allFileNames = Directory.EnumerateFiles(dirPath)
.Select(System.IO.Path.GetFileName)
.ToArray();
答案 1 :(得分:1)
我无法访问此文件夹。我尝试使用Directory.GetFiles(dirPath),当我检查它的长度时,它表示0.这些Windows应用程序是沙盒。
是的你是对的,在UWP应用程序中,我们可以在后面的代码中访问应用程序的本地文件夹或一些特殊的lib,如音乐库,否则我们需要使用文件夹/文件选择器让用户选择访问文件夹/文件。
我尝试使用Filepicker和Storagefolder,但我不知道如何将它变成字符串数组。
这是一个正确的方向,你可以使用StorageFolder.GetFilesAsync这样的方法来完成这项工作:
private string[] filename;
private async void Button_Click(object sender, RoutedEventArgs e)
{
FolderPicker picker = new FolderPicker();
picker.SuggestedStartLocation = PickerLocationId.ComputerFolder;
picker.FileTypeFilter.Add("*"); //match all the file format
StorageFolder folder = await picker.PickSingleFolderAsync();
if (folder != null)
{
var subFiles = await folder.GetFilesAsync();
filename = new string[subFiles.Count()];
for (int i = 0; i < subFiles.Count(); i++)
{
filename[i] = subFiles.ElementAt(i).DisplayName;
textBlock.Text = textBlock.Text + "+" + filename[i]; //show the file name in a textblock
}
}
}
使用picker.FileTypeFilter.Add("*")
可以使过滤器匹配文件夹中的所有文件类型,但这些文件不会显示在选择器界面中。