UWP从绝对路径或相对路径解析文件夹

时间:2017-05-22 07:03:22

标签: c# path uwp

我想解析用户可以选择的文件夹。 但是如果我明白,UWP中不允许使用绝对路径,因为媒体后面的磁盘不一样(xbox,windows phone,windows desktop,...)?

所以,我有一个名为Parser的类,它可以解析用户选择的路径,但现在只能解析当前文件夹。

这不起作用:

Parser parser = new Parser(@"C:\a\b\c");
parser.createTreeView(tree);

请帮帮我。提前谢谢。

编辑:这是我的Parser类=>

public TreeViewItem Parse(DirectoryInfo directoryInfo)
    {
        try
        {
            var directoryNode = new TreeViewItem { Header = directoryInfo.Name };
            Convention convention = new Convention();

            foreach (var directory in directoryInfo.GetDirectories())
            {

                directoryNode.Items.Add(Parse(directory));
                System.Diagnostics.Debug.WriteLine("test : " + directory.Name);
            }
            foreach (var file in directoryInfo.GetFiles())
            {
                if (file.Name.Contains(EConvention.INSTALL))
                {
                    listFiles.Add(file.FullName);
                }

                TreeViewItem item = new TreeViewItem
                {
                    Header = Path.GetFileNameWithoutExtension(file.FullName),
                    Tag = file.FullName

                };
                directoryNode.Items.Add(item);
            }
            return directoryNode;
        }
        catch (System.UnauthorizedAccessException e)
        {
            //MessageDialog dialog = new MessageDialog(""+e.Message);
            dialogAsync(e.Message);
            return new TreeViewItem();
        }

    }


public void CreateTreeView(TreeView tree)
    {

        DirectoryInfo dir = new DirectoryInfo(pathToParse);
        System.Diagnostics.Debug.WriteLine("dir exists ? "+dir.Exists);
        if (dir.Exists)
        {
            System.Diagnostics.Debug.WriteLine("dir existe");
            TreeViewItem root = new TreeViewItem() { Header = dir.Name };
            root.Tag = dir;
            tree.Items.Add(Parse(dir));
        }
    }

1 个答案:

答案 0 :(得分:1)

UWP应用无权访问设备上的所有文件。默认情况下,应用可以访问某些文件系统位置应用还可以通过文件选择器或通过声明功能访问其他位置。有关详细信息,请参阅File access permissions

虽然,我们可以在UWP应用中使用DirectoryInfo,但它只能用于UWP应用可以默认访问的文件夹,例如安装目录和本地文件夹等。{{3}中的大多数类型有类似的限制。在处理UWP中的文件或文件夹时,一个重要规则是System.IO namespaces for UWP apps

您可以使用Skip the path: stick to the StorageFile让用户选择一个文件夹,然后将其添加到您应用的Folder​PickerFutureAccessList以跟踪它。您可以在MostRecentlyUsedList中详细了解如何使用这些列表。在此之后,您可以随时从FutureAccessListMostRecentlyUsedList检索How to track recently-used files and folders

获得StorageFolder后,您可以在Parse代替DirectoryInfo.GetDirectoriesDirectoryInfo.GetFiles方法中使用StorageFolderGetFilesAsync()方法