在 Windows8 中,我正在尝试使用 GetBasicPropertiesAsync() 来获取新创建文件的大小。 有时,但并非总是(约 25% 的时间),此调用会给出以下例外:
"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 的现有副本。
- 不使用文件资源管理器查看目录
很奇怪吧?闻起来可能是与文件系统隧道有关的错误,或者可能是 DotNetZip 正在执行并保留资源(可能重命名 TEMP 文件)的一些内部缓存,即使在 ZipFile 被处置后?