Я нашел аналогичный question для моего, но, к сожалению, у него не было ответа.C# Создать файл после StorageFile.DeleteAsync с ошибкой 0x80070005 E_ACCESSDENIED
Я использую класс StorageFile в C# для создания, записи и повторного удаления файла. На моей второй итерации он не может создать файл, возвращая ошибку отказа в доступе.
Вот простой модульного тестирования я соединял в Visual Studio 2015, чтобы продемонстрировать проблему:
[TestMethod]
public async Task DeleteTest()
{
StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;
byte[] array = System.Text.Encoding.ASCII.GetBytes("Test data");
int i = 1, max = 20;
string phase = "not started";
try
{
do
{
// create file
phase = "creating";
StorageFile file = await folder.CreateFileAsync("test" /*,CreationCollisionOption.GenerateUniqueName*/);
// write data to the file
phase = "opening";
System.IO.Stream stream = await file.OpenStreamForWriteAsync();
phase = "writing";
await stream.WriteAsync(array, 0, array.Length);
phase = "flushing";
await stream.FlushAsync();
// delete file
phase = "deleting";
await file.DeleteAsync();
} while (++i <= max);
}
catch(Exception e)
{
Assert.Fail("While '{0}' on iteration {1}: {2}", phase, i, e.Message);
}
}
выше утверждение пожаров, отчетность:
В то время как 'создание' на итерации 2: В доступе отказано. (Исключение из HRESULT : 0x80070005 (E_ACCESSDENIED))
Если кто-то может позволить мне знать, что я делаю неправильно, я ценю это. Я с этим согласен.
Вы уверены, что 'await file.DeleteAsync();' закончил перед следующей итерацией 'await folder.CreateFileAsync'? – Prajwal
Нет, я не. Кажется, это похоже на то, что он еще не закончен, потому что я получаю ошибку отказа в доступе. Но я ожидал бы, что оператор «ждут» заставит выполнение программы ждать, пока файл не будет удален. – Jeff
Я думаю, что перед удалением файла сначала должен быть Dispose() 'объект System.IO.Stream. Рекомендуется очищать ресурсы, используемые объектом. Это также может решить проблему ACCESSDENIED. – crazyGamer