Я пытаюсь добавить несколько файлов в уже созданный ZIP-файл, используя PickMultipleFilesAsync () .Ранее я создал ZIP-файл, к которому хочу получить доступ, в том же коде, используя метод FilesavePicker.PickSaveFileAsync()
.Приложение работает на Windows 10 Pro версии 1803 на ноутбуке, и я использовал Visual Studio Community 2017 для его создания.
Проблема, с которой я столкнулся, заключается в том, что после выполнения шагов, описанных в FileOpenPicker Страница MSDN, я получаю System.UnauthorizedAccessException: 'Доступ к пути' C: \ Users \ 'Пользователь' \ Downloads {ZIP file} 'запрещен.'
Я создалZIP-файл и попытался добавить новые файлы, используя этот код:
StorageFile file = await savePicker.PickSaveFileAsync();
if (file != null)
{
// Prevent updates to the remote version of the file until we finish making changes and call CompleteUpdatesAsync.
CachedFileManager.DeferUpdates(file);
try
{
Stream stream = await file.OpenStreamForWriteAsync();
using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Update))
{
// This line works fine, file is added
archive.CreateEntryFromFile(path_to_another_file, file_name_in_ZIP);
//....
var dialog = new MessageDialog("Do you want to add more files to ZIP?");
//... (dialog configuration for Yes/No options)
var result = await dialog.ShowAsync();
if(result.Label == "Yes")
{
Debug.WriteLine("Yes option was selected!");
// Include additional files
var openPicker = new FileOpenPicker();
openPicker.FileTypeFilter.Add("*");
openPicker.SuggestedStartLocation = PickerLocationId.Downloads;
IReadOnlyList<StorageFile> addedFiles = await openPicker.PickMultipleFilesAsync();
if (addedFiles.Count > 0)
{
// Application now has read/write access to the picked file(s)
foreach (StorageFile addedFile in addedFiles)
{
Debug.WriteLine(addedFile.Path); // No problem here
// I get the UnauthorizedAccessException here:
archive.CreateEntryFromFile(addedFile.Path, @"additional files/" + addedFile.Name);
}
}
else
{
// Update log file
globalLog += GetTime() + "No additional files";
}
}
}
}
}
Я уже добавил <rescap:Capability Name="broadFileSystemAccess"/>
в appxmanifest на всякий случай, но, поскольку у меня был доступ к выбранным файлам с помощью FileOpenPicker, я думаю, что это не проблема.
Когда я создал ZIP-файл в этом коде, у меня все еще должен быть к нему доступ, верно?Я подозреваю, что FileOpenPicker каким-то образом «закрывает» доступ к ZIP-файлу для предоставления доступа к добавляемым файлам или что MessageDialog препятствует доступу к ZIP-файлу, который я создал после того, как я вызвал showAsync ().
Есть лиДругой способ добиться того, что я пытаюсь?
РЕДАКТИРОВАТЬ : я не могу получить доступ к файлам, которые я выбрал, используя FileOpenPicker, несмотря на то, что я могу показать имена файлов в консоли отладки,Доступ к ZIP-файлу в порядке.