2016-04-13 4 views
0

Я разрабатываю приложение для универсальной платформы Windows. Чтобы продолжить, мне нужны имена файлов из всех файлов в одной папке в массив строк. Метод получения файлов не работает в UWP. Я пробовал с Filepicker и Storagefolder, но я не знаю, как получить его в массив строк.Имена файлов в массиве строк C# Универсальные Windows

// 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

Добавьте сюда свой существующий код, поэтому нам нужно что-то сделать. – Romain

ответ

1

Вы можете использовать Directory.EnumerateFiles, System.IO.Path.GetFileName и LINQ:

string[] allFileNames = Directory.EnumerateFiles(dirPath) 
    .Select(System.IO.Path.GetFileName) 
    .ToArray(); 
+0

У меня нет доступа к этой папке. Я пробовал с Directory.GetFiles (dirPath), и когда я проверяю длину, о которой говорит 0. Эти Windows-приложения имеют песочницу – reaperghost

1

У меня нет доступа к этой папке. Я пробовал с Directory.GetFiles (dirPath), и когда я проверяю длину, указанную 0. Эти приложения Windows имеют песочницу.

Да вы правы об этом, в UWP приложения, мы можем получить доступ к локальной папке приложения или какой-либо специальным Lib как Music Library в коде позади, в противном случае мы должны использовать папку/File Picker, чтобы пользователь выберите доступ к папке/файлу.

Я пробовал с 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("*") может сделать матч фильтра всех типов файлов в папке, но эти файлы не будут будет отображаться в интерфейсе выбора.