UWP项目中的DirectoryInfo用法

时间:2017-08-19 14:34:03

标签: c# .net io uwp

我目前正在使用Windows 10 UWP项目,并且我一直遇到以下异常:

  

无法转换类型为#System ;IO.FileSystemInfo []'的对象输入' System.Collections.Generic.IEnumerable`1 [System.IO.FileInfo]'。

这是抛出它的代码:

 DirectoryInfo dirInfo = new DirectoryInfo(path);
 FileInfo[] files = dirInfo.GetFiles(path);

路径是有效的,我多次验证,我不知道为什么我得到这个例外。 DirectoryInfo类仍然可以在UWP应用程序中使用,还是应该使用等效的?

1 个答案:

答案 0 :(得分:1)

DirectoryInfo类适用于UWP。但是,它有很多局限性。比如路径是否有效。有关更多详细信息,请参阅Skip the path: stick to the StorageFile

当我通过Second path fragment must not be a drive or UNC name参数时抛出path异常。我找到了以下描述。

  

要与文件名匹配的搜索字符串。此参数可以包含    有效文字路径和通配符(*和?)字符的组合(请参阅备注),    但不支持正则表达式。默认模式为“*”,返回    所有文件。

所以我修改了searchPattern,如下所示,效果很好。

string root = Windows.ApplicationModel.Package.Current.InstalledLocation.Path;
string path = root + @"\Assets\Media";

DirectoryInfo dirinfo = new DirectoryInfo(path);
FileInfo[] files = dirinfo.GetFiles("head.*");
  

我不知道为什么我会得到这个例外。 DirectoryInfo类仍然可以在UWP应用程序中使用,还是应该使用等效的?

在UWP中查询文件的最佳做法是使用文件夹选择器选择文件夹并使用GetFilesAsync方法枚举所有文件。例如:

var picker = new Windows.Storage.Pickers.FolderPicker();
picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
picker.FileTypeFilter.Add("*");
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
var folder = await picker.PickSingleFolderAsync();
if(folder != null)
{
    StringBuilder outputText =  new StringBuilder();
    var query = folder.CreateFileQuery();
    var files = await query.GetFilesAsync();
    foreach (StorageFile file in files)
    {
        outputText.Append(file.Name + "\n");
    }
}