我目前正在使用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应用程序中使用,还是应该使用等效的?
答案 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");
}
}