2016-04-13 23 views
0

我正在開發通用Windows平臺應用程序。 要繼續我需要從一個文件夾中的所有文件的文件名到一個字符串數組。 get文件方法在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.EnumerateFilesSystem.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喜歡音樂庫中,否則,我們需要使用文件夾/文件選擇器,讓用戶選擇訪問文件夾/文件。

我嘗試過使用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("*")可以使符合過濾條件的所有類型的文件夾中的文件,但這些文件不會在拾取器界面中顯示。