我發現了一個類似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))
如果任何人都可以讓我知道我做錯了,我會很感激的。我憑我的智慧結束了這一切。
你肯定'伺機file.DeleteAsync();'已'的等待folder.CreateFileAsync'下一次迭代之前完成? – Prajwal
不,我不是。看起來好像還沒有完成,因爲我得到了訪問被拒絕的錯誤。但我期望'await'操作符可以使程序執行等待,直到文件被刪除。 – Jeff
我想刪除文件之前,你應該先'的Dispose()'的System.IO.Stream對象。建議清理該對象使用的資源。這也可以解決ACCESSDENIED的問題。 – crazyGamer