【问题标题】:DirectoryInfo usage in a UWP projectUWP 项目中的 DirectoryInfo 使用情况
【发布时间】:2018-01-28 02:10:33
【问题描述】:

我目前正在处理一个 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 应用程序中使用还是应该使用等效的类?

【问题讨论】:

    标签: c# .net io uwp


    【解决方案1】:

    DirectoryInfo 类适用于 UWP。但是,它有很多限制。比如路径是否有效。更多详情可以参考Skip the path: stick to the StorageFile

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

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

    所以我修改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");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 2012-06-09
      • 2021-06-09
      • 1970-01-01
      相关资源
      最近更新 更多