2017-06-28 30 views
1

0的文件在我的控制檯應用程序,我用Directory.EnumerateFiles返回UWP

var allFiles = Directory.EnumerateFiles(directoryPath, "*.*", SearchOption.AllDirectories).ToList(); 

返回一個文件夾中的每個文件的路徑(和所有子文件夾)。

但是在UWP,使用同樣的事情返回0

FolderPicker folderPicker = new FolderPicker(); 
    folderPicker.SuggestedStartLocation = PickerLocationId.ComputerFolder; 
    folderPicker.FileTypeFilter.Add("*"); 
    StorageFolder pickedFolder = await folderPicker.PickSingleFolderAsync(); 
    var allFiles = Directory.EnumerateFiles(pickedFolder.Path, "*.*", SearchOption.AllDirectories).ToList(); 

我做了使用GetFilesAsync()GetFolderAsync()功能的方法,但它是沒有在附近快如Directory.EnumerateFiles()

private async Task GetFilesInFolders(ObservableCollection<string> list, StorageFolder parent) 
    { 
     foreach (var file in await parent.GetFilesAsync()) 
     { 
      list.Add(file.Path); 
     } 
     foreach (var folder in await parent.GetFoldersAsync()) 
     { 
      await GetFilesInFolders(list, folder); 
     } 
    } 

爲什麼Directory.EnumerateFiles()返回0個文件?

+0

你確定'directoryPath'和'pickedFolder.Path'是相同的嗎?你有沒有嘗試用相同的硬編碼字符串替換兩者來排除? –

+0

@RufusL是的,我試過了,仍然是0 :( –

回答

2

與傳統桌面應用程序不同,UWP運行沙盒並且對文件系統的訪問非常有限。

默認情況下,UWP只能訪問LocalFolder/InstallationFolder等本地文件夾...或者您的應用創建的用戶下載文件夾中的文件和文件夾,如果應用需要訪問其他文件,我們可能需要使用功能或文件選擇器。欲瞭解更多信息,請參閱

爲什麼Directory.EnumerateFiles()返回0個文件?

如果pickFolder不在應用程序的本地文件夾中,UWP應用程序無法通過使用pickFolder.Path直接訪問該文件夾。如果您從應用程序的本地文件夾中選擇文件夾,您的代碼將正常工作。

此外,在UWP中使用路徑可能不是一個好習慣,它不適用於音樂庫,videolibrary等已知文件夾。欲瞭解更多信息,請參閱Rob的博客:Skip the path: stick to the StorageFile

這是推薦使用的文件夾選取器來讓用戶選擇的文件夾並將其添加到您的應用程序的FutureAccessListMostRecentlyUsedList,通過這種方式,他們可以在以後重新加載,而不需要用戶去通過選擇器。欲瞭解更多信息,請檢查:How to track recently-used files and folders

+0

我之所以問這個問題,是因爲Directory.EnumerateFiles()與GetFilesAsync()相比有多快,所以有一種方法可以獲得相同的性能,但使用UWP功能之一? –

相關問題