В качестве введения в документ возможность broadFileSystemAccess и Доступ к дополнительным расположениям ,
Эта возможность работает для API в Windows.Storage Пространство имен.
Таким образом, вы все еще не можете получить файл напрямую по пути к файлу, как E:\
, используя sharpispress Apis.Но вы можете использовать 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);
}
}
}
}
--- Обновление ---
С UWPу приложения есть разрешение на доступ к файлу, вы не можете использовать ни один Windows.Storage Пространство имен API для прямого доступа к пути к файлу, например E:\foldre\
, но ваше приложение имеет полное разрешение для локальной папки, вы можете использовать IArchiveEntry.WriteToDirectory(string destinationDirectory)
метод для точного размещения файлов в локальной папке, затем вы можете скопировать файлы в нужное место папки, попробуйте следующий код,
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();
}