字符串数组中的文件名c#通用Windows

时间:2016-04-13 08:12:47

标签: c# win-universal-app windows-applications universal

我正在开发通用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();  

2 个答案:

答案 0 :(得分:1)

您可以使用Directory.EnumerateFilesSystem.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("*")可以使过滤器匹配文件夹中的所有文件类型,但这些文件不会显示在选择器界面中。