В Windows8 я пытаюсь использовать GetBasicPropertiesAsync(), чтобы получить размер вновь созданного файла. Иногда, но не всегда (~ 25% времени), этот вызов дает исключение:Почему GetBasicPropertiesAsync() иногда выдает исключение?
"Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))".
Файл создается с помощью DotNetZip. Я добавляю тысячи файлов в архив, который занимает несколько минут, чтобы запустить:
using (ZipFile zip = new ZipFile())
{
zip.AddFile(...); // for thousands of files
zip.Save(cr.ArchiveName);
}
var storageFile = await subFolder.GetFileAsync(cr.ArchiveName);
// storageFile is valid at this point
var basicProperties = await storageFile.GetBasicPropertiesAsync(); // BOOM!
Несколько по-видимому, случайные вещи, кажется, чтобы уменьшить вероятность возникновения исключения:
- Удаление существующей копии cr.ArchiveName перед началом цикла.
- Не просмотре каталога с помощью File Explorer
Weird, да? Похоже, это может быть ошибка, связанная с File System Tunneling или, возможно, это внутреннее кэширование, которое DotNetZip выполняет и удерживает на ресурсах (возможно, переименовывает файл TEMP) даже после того, как ZipFile настроен?
E_ACCESSDENIED скорее всего указывает, что файл находится в использовании, хотя, глядя на ваш код, я не уверен, почему. Возможно, вы можете попробовать использовать [Handle] (http://technet.microsoft.com/en-US/sysinternals/bb896655), чтобы помочь вам диагностировать проблему. –