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 の既存のコピーを削除します。
- エクスプローラーを使用してディレクトリを表示しない
変でしょ?ファイル システム トンネリングに関連するバグか、ZipFile が破棄された後でも、DotNetZip が実行してリソースを保持している (おそらく TEMP ファイルの名前を変更する) 内部キャッシングのような匂いがしますか?