C# UWP broadFileSystemAccess使用System.IO读取和提取rar文件

C# UWP broadFileSystemAccess使用System.IO读取和提取rar文件,c#,uwp,read-write,file-access,C#,Uwp,Read Write,File Access,我的目标是构建17134,并尝试使用system.IO获取目录中的文件。我还使用sharpcompress来提取.rar文件。据我的理解/我在网上读到的,新的受限功能“broadFileSystemAccess”应该允许我的应用程序完全访问任何目录。我的代码在下面,我在我的电子驱动器上传入一个硬编码目录 public void DirSearch(string sDir) { var ext = new List<string> { "*.rar",

我的目标是构建17134,并尝试使用system.IO获取目录中的文件。我还使用sharpcompress来提取.rar文件。据我的理解/我在网上读到的,新的受限功能“broadFileSystemAccess”应该允许我的应用程序完全访问任何目录。我的代码在下面,我在我的电子驱动器上传入一个硬编码目录

    public void DirSearch(string sDir)
    {
        var ext = new List<string> { "*.rar", "*.zip" };

        foreach (String fileExtension in ext)
        {
            foreach (String file in Directory.EnumerateFiles(sDir, fileExtension, SearchOption.AllDirectories))
            {
                var archive = ArchiveFactory.Open(file);
                foreach (var entry in archive.Entries)
                {
                    if (!entry.IsDirectory)
                    {
                        Console.WriteLine(entry.Key);
                        entry.WriteToDirectory(@"E:\temp\", new ExtractionOptions() { ExtractFullPath = true, Overwrite = true });
                    }
                }

                Debug.WriteLine(file);
            }
        }
    }

如何使用System.IO和Sharpcompress(使用broadFileSystemAccess功能)读取和写入电子驱动器?我遗漏了什么?

作为文档中的介绍

此功能适用于命名空间中的API

因此,您仍然无法使用sharpcompress API通过文件路径直接获取文件,如
E:\
。但是您可以使用
StorageFolder.GetFolderFromPathAsync
Api来获取文件夹,然后使用
ArchiveFactory.Open(Stream-Stream,ReaderOptions-ReaderOptions=null)
方法来获取文件

下面是一些示例代码,您可以将其作为参考

public async void DirSearch(string sDir)
{
    var ext = new List<string> { ".rar", ".zip" };
    var folder = await StorageFolder.GetFolderFromPathAsync(sDir);
    var exactFile = await folder.CreateFileAsync("newFile", CreationCollisionOption.GenerateUniqueName);
    using (var writeStream = await exactFile.OpenStreamForWriteAsync())
    {
        foreach (var file in await folder.GetFilesAsync())
        {
            if (ext.Contains(file.FileType))
            {
                var stream = await file.OpenReadAsync();
                var archive = ArchiveFactory.Open(stream.AsStream());
                foreach (var entry in archive.Entries)
                {
                    if (!entry.IsDirectory)
                    {
                        Console.WriteLine(entry.Key);
                        entry.WriteTo(writeStream);
                    }
                }
                Debug.WriteLine(file);
            }
        }
    }
}

谢谢,它可以处理简单的.zip文件,但不能处理多部分的.rar文件。它只读取初始的.rar文件,不读取任何附加文件parts@SteveFitzsimons我在回答中添加了更新部分,请检查。
public async void DirSearch(string sDir)
{
    var ext = new List<string> { ".rar", ".zip" };
    var folder = await StorageFolder.GetFolderFromPathAsync(sDir);
    var exactFile = await folder.CreateFileAsync("newFile", CreationCollisionOption.GenerateUniqueName);
    using (var writeStream = await exactFile.OpenStreamForWriteAsync())
    {
        foreach (var file in await folder.GetFilesAsync())
        {
            if (ext.Contains(file.FileType))
            {
                var stream = await file.OpenReadAsync();
                var archive = ArchiveFactory.Open(stream.AsStream());
                foreach (var entry in archive.Entries)
                {
                    if (!entry.IsDirectory)
                    {
                        Console.WriteLine(entry.Key);
                        entry.WriteTo(writeStream);
                    }
                }
                Debug.WriteLine(file);
            }
        }
    }
}
public async void DirSearch(string sDir)
{
    var ext = new List<string> { ".rar", ".zip" };
    var folder = await StorageFolder.GetFolderFromPathAsync(sDir);
    var ExactLocalFolder =await ApplicationData.Current.LocalFolder.CreateFolderAsync("ExactLocalFolder");
    foreach (var file in await folder.GetFilesAsync())
    {
        if (ext.Contains(file.FileType))
        {
            var stream = await file.OpenReadAsync();
            var archive = ArchiveFactory.Open(stream.AsStream());
            foreach (var entry in archive.Entries)
            {
                if (!entry.IsDirectory)
                {
                    Console.WriteLine(entry.Key);
                    //extract the files to local folder
                    entry.WriteToDirectory(ExactLocalFolder.Path);
                }
            }
        }
    }
    //copy the files to the folder that you want to save the extract file into
    foreach (var file in await ExactLocalFolder.GetFilesAsync())
    {
        await file.CopyAsync(folder);
    }
    //delete the folder in the local folder
    await ExactLocalFolder.DeleteAsync();
}